计算机语言运用--数值计算9-方程的计算机处理94(2)_Cvs
计算机:电子线路组成的计算机器。人与计算机则是通过计算机语言-符号系统说给计算机听而交流。
计算机语言有低级语言-机器语言、汇编、高级语言-C/C++/C#/VB/PASCAL/LISP/JAVA/PYTHON/……成百上千种之多。
作为一种计算机器—可以协助人类处理各种事情—数值计算问题、文字处理问题、图形图像处理问题、事务问题……。自从有了数字计算的计算机器,几乎所有的可以交给计算机的事情,都交给计算机来处理—是辅助处理—按照人们的要求—事先安排的模式进行处理。
数值计算
代数的计算、初等函数的计算、代数方程的求解、解析几何与微分几何的求解、矢量-张量与场论的求解、抽象代数-空间及泛函分析、级数与变换、特殊函数问题、概率统计与随机过程分析计算、误差分析与实验数据处理、最优化方法分析、有限单元法求解、数论分析、集合论及其计算、拓扑学分析与计算、组合数学的计算、图结构处理、数理逻辑分析与处理、……、……
或者说:
自然数的计算、整数的计算、实数的计算、复数的计算、矢量-向量的计算、矩阵的计算、函数的计算、代数方程的计算、函数方程的计算、微分的计算、积分的计算、常微分-一元微分方程的计算、偏微分-多元微分方程的计算、连续数量的计算、离散数量的计算、集合的计算、组合数学的计算、……、……
或者说:科学与工程技术应用中的数值计算、……、……
方程的计算机处理
这里说的方程,是以实数域为计算范围。
这里说的方程:是含有未知数的等式。
可以是a+5=8,或X+A=B,或ax2+bx+c=0,或ax+by=c与dx-ey=f,或ax"+bx=c,或,
或
……、……
计算机如何处理这些问题呢?,问题的描述是什么样子的,才能充分利用计算机呢?
当然是代数形式的。便于计算机发挥特长,便于程序软件的重用性。通过用户交互,决定将什么样的具体问题交给计算机进行数值处理。
方程的计算机处理
MATLAB语言及其平台、Fotran语言平台 C语言平台v6
C语言平台vs
对于任何一个计算机语言来说,X+a=b型的方程也需要进行改造:
成为----X=b-a的样式;
C是编译型语言,因此需要将所做工作用计算机语言编制程序,再交给计算机来处理。作为静态数据的模式,与MATLAB不同,需要对计算的数据—数值或代数预先声明变量,以便申请到内存来放置。
用C语言编写为文件形式,接着编译成*.exe文件,再运行—人机交互。
计算机是进行数值计算的好帮手,因此需要对a,b预先赋值,再进行计算;
那么对于一元二次方程呢?也是如此。当然,最好是用求解方程的两个根的公式来进行处理—也就是,用它们作为计算机语言描述的基础。当然,需要计算机语言描述判别开平方中的虚数—复数根的问题。这样,便有了方程处理的前期工作,手工处理。
有数学家推导的求根公式可以直接利用
由于负数的开平方问题,需要判断b2-4ac=(>0两个不相等的实根;=0两个相等的实根;<0两个不相等的共轭复数根;三种情况)
程序文件
//一元二次方程--QuadraticEquation.C
#include "stdio.h"
#include
#include
#include
void main()
{
//variable declaration
int i,N;
float a,b,c;
double q1,q2,x1,x2,xC;
FILE *fp;
char file_z[10];
//input
printf("请输入希望计算方程的个数,N:\n");
scanf_s("%d",&N);
for(i=0;i
{
printf("请输入一元二次方程的系数,用逗号隔开\n");
scanf_s("%f,%f,%f",&a,&b,&c);
q1=b*b-4*a*c;
if(q1>=0)
{
x1=(-b+sqrt(q1))/(2*a);
x2=(-b-sqrt(q1))/(2*a);
printf("方的解是两个实数根:\n");
printf("%6.2f,%6.2f\n",x1,x2);
//信息存储
printf("请输入要保存的文件名与格式:");
scanf_s("%s",file_z);
if((fp=fopen(file_z,"w+"))==NULL)
{
printf("cannot open file\n");
}
else{
fprintf(fp,"输入值:%6.2f\n",a);//写入
fprintf(fp,"输入值:%6.2f\n",b);
fprintf(fp,"输入值:%6.2f\n",c);
fprintf(fp,"方的解是两个实数根:\n");
fprintf(fp,"计算结果:x1= %7.3f\n",x1);
fprintf(fp,"计算结果:x2= %7.3f\n",x2);
fclose(fp);//保存
printf("计算结果的文件已保存!文件名为:%s\n",file_z);
}
}
else
{
xC=sqrt(-q1)/(2*a);
q2=(-b)/(2*a);
printf("方程有共轭复根\n");
printf("x1= %6.2f +%6.2fi \n",q2,xC);
printf("x2= %6.2f -%6.2fi \n",q2,xC);
//信息存储
printf("请输入要保存的文件名与格式:");
scanf_s("%s",file_z);
if((fp=fopen(file_z,"w+"))==NULL)
{
printf("cannot open file\n");
}
else
{
fprintf(fp,"输入值:%6.2f\n",a);//写入
fprintf(fp,"输入值:%6.2f\n",b);
fprintf(fp,"输入值:%6.2f\n",c);
fprintf(fp,"方程的解是一对共轭复数根:\n");
fprintf(fp,"计算结果:x1= %7.3f +%6.2fi\n",q2,xC);
fprintf(fp,"计算结果:x2= %7.3f -%6.2fi\n",q2,xC);
fclose(fp);//保存
printf("计算结果的文件已保存!文件名为:%s\n",file_z);
}
}
}
system("pause");
}
看看运行过程
请输入希望计算方程的个数,N:
3
请输入一元二次方程的系数,用逗号隔开
2,3,4
方程有共轭复根
x1= -0.75 + 1.20i
x2= -0.75 - 1.20i
请输入要保存的文件名与格式:1.txt
计算结果的文件已保存!文件名为:1.txt
请输入一元二次方程的系数,用逗号隔开
2.3,-8,1.2
方的解是两个实数根:
3.32, 0.16
请输入要保存的文件名与格式:2.txt
计算结果的文件已保存!文件名为:2.txt
请输入一元二次方程的系数,用逗号隔开
12,24,4
方的解是两个实数根:
-0.18, -1.82
请输入要保存的文件名与格式:3.txt
计算结果的文件已保存!文件名为:3.txt
请按任意键继续. . .
人机交互与运行结果:
感觉咋样?什么是方程的计算机处理—算法及其描述,运行及其人机交互。