求解一般方程 用C语言或C#

来源:百度知道 编辑:UC知道 时间:2024/07/04 17:53:25
用C语言求解一般方程很简单
如下:
#include<stdio.h>
#include<math.h>
double f(double x)
{
double y;
y=pow(x,3.0)+3.0*x+1.0;
return (y);
}
void main()
{
double left=-1.0;
double right=1.0;
double temp=0.0;

while(f(left)*f(right)<0)

{
temp=(left+right)/2;

if(abs(f(temp))<1.0e-10)
break;

else
{
if(f(temp)*f(left)<0)
right=temp;
else
left=temp;
}
}
printf("temp=%lf",temp);
printf("\n%f",pow(temp,3)+3*(temp)+1);
getchar();
}
利用的是二分法,感觉什么方程都可求解。
但是感觉不太好的就是代码不够通用,比如以上的代码就只能求解方程:
X^3 + 3*X + 1 = 0
虽然要解其他方程只要改一下Function就OK了,但太累赘,我想更通用的直接输入任意方程然后求解它。
我的思路是其实如果能直接将输入的方程式转为Function不就OK了么,也就是说上面的代码中的
double f(double x)
{
double y;
y=pow(x,3.0)+3

不知道你听说过模板方法设计模式没有,这个一利用OO多态方法,那么你仅仅需要一个基类方法签名,自己定义很多子类方法。
模板方法的主旨是:提供灵活的方法替代方案。
建议你网上查查模板方法设计模式的用法。

本人也不大懂,不过如果是什么方程都能解的话就有点困难,如果只是解二元N次方程的话,倒比较容易实现吧,设N个系数,在主函数里面输入,然后带到子函数里就行了

任意的啊?这个比较麻烦,涉及到编译原理中的词法分析。

从左到右每次读入1个字符,判断是否:
函数名(+、-、*、/、括号、sin、cos之类)
数字(0~9和小数点)
变量名(比如x)

然后进行相应操作。

有点类似数据结构这门课的“表达式求值”