matlab使用(解N元方程组)
试着用C语言编程解N元方程组
#include
#define M 10
float fdel(float *p,int n)
{ int i;
float sum=0;
for(i=0;i
sum+=*(p+i);
sum/=n;
return (fabs(sum));
}
void chu(float *p)
{int i;
for(i=0;i
*(p+i)=999;
return ;}
void print(float *p,int n)
{int i;
for(i=0;i
printf("x%d=%f ",i+1,*(p+i));
return ;}
/**void scan(float **p,int n)
{int i,j;
for(i=0;i
for(j=0;j
{printf(" a%d%d=",i+1,j+1);
scanf("%f",*(p+i)+j);}
return ;}**/
void den(float *a,float *b,int n)
{int i;
for(i=0;i
*(a+i)=*(b+i);
return ;}
void jie(float *p0,float a[M][M],float *p,float *b,int n)
{float sum=0;
int i,j;
for(i=0;i
{ for(j=0;j
{if(i!=j) sum=sum+a[i][j]*p0[j];
else {n=a[i][j];continue;}
}
*(p+i)=*(b+i)-sum/n;}
}
main()
{ float x0[M],xi[M][M],b[M],x[M];
int i,j,n;
chu(x0);
chu(b);
chu(x);
for(i=0;i
{printf("x0=%f ",x0[i]);
printf("b=%f ",b[i]);
printf("x=%f ",x[i]);}
for(i=0;i
for(j=0;j
xi[i][j]=0;
printf("shu ru wuizhishu geshu n=");
scanf("%d",&n);
printf( " shu ru fangchengzu gege xishu a[i][j]= ");
for(i=0;i
for(j=0;j
{ printf(" a%d%d=",i+1,j+1);
scanf("%f",&xi[i][j]); }
printf("x[1][1]=%f",xi[1][1]);
for(i=0;i
print(*(xi+i),n);
for(i=0;i
printf(" abs=%f",fdel(*(xi+i),n));
}
#include <stdio.h>
double f(double x)
{
double y;
y=2*x*x*x-9*x*x+12*x-3;
return(y);
}
int main()
{
double t,a=0,b=1,tmp;
t=(a+b)/2;
while((f(b)-f(a))>1e-8)
{
t=(a+b)/2;
tmp=f(t);
if(tmp==0)
break;
else if(tmp<0)
a=t;
else
b=t;
}
printf("该方程在(0,1)之间的根是%.8f,f(%.8f)=%.8f\n",t,t,f(t));
return 0;
}
牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求
根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程
根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。另外该方法广泛用于计算机编程中。 设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0)
,称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值
序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。
解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… 取其线性部分
,作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x0)+f'(x0)(x-x0)=f(x)=0 设f'(x0)≠0则其解为x1=x0-f(x0)/f'(x0) 这样,得到牛顿法的一个迭代序列
:x(n+1)=x(n)-f(x(n))/f'(x(n))。
对于做应用的来说,更关心的是怎么实现。找了一下算法,发现主要是MATLAB编程语言和C语言。
这个是我首先找到的MATLAB的代码
---------------------------------
%牛顿迭代法 解方程y=x.^2-x-1
x=1.5;
format long;
x1=x-func2_1(x)/func2_1_1(x);
if(abs(x1)<1.5)
delt=abs(x1-x);
else
delt=abs((x1-x)/x1);
end
while(delt>1e-6|abs(func2_1(x))>1e-6)
x=x1; x1=x-func2_1(x)/func2_1_1(x);
if(abs(x1)<1.5)
delt=abs(x1-x);
else
delt=abs((x1-x)/x1);
end
if func2_1(x1)==0
break
end
end
disp('解方程y=x.^2-x-1,牛顿迭代法结果')
x1
%编辑函数
function y=func2_1(x)
y=x.^2-x-1;
function y=func2_1_1(x)
y=2*x-1
--------------------------
没用过MATLAB,但是语言是相通的,修改一下即可。呵呵,还是vb简单
以下是VB代码
Sub p1()
'牛顿迭代法
n = 0
xx = 2
x = 4 '设定初值
x1 = x - func2_1(x) / func2_1_1(x)
If Abs(x1) < xx Then
delt = Abs(x1 - x)
Else
delt = Abs((x1 - x) / x1)
End If
Do While (delt > 0.000001 or Abs(func2_1(x)) > 0.000001)
n = n + 1
x = x1
x1 = x - func2_1(x) / func2_1_1(x)
If (Abs(x1) < xx) Then
delt = Abs(x1 - x)
Debug.Print x1, delt, "1"
Else
delt = Abs((x1 - x) / x1)
Debug.Print x1, delt, "2"
End If
If func2_1(x1) = 0 Then
Exit Do
End If
Loop
Debug.Print "牛顿迭代法结果", x1, "迭代次数" & n
End Sub
Private Function func2_1(ByVal x As Double) As Double
'原方程
func2_1 =x ^ 2 - x - 1
End Function
Private Function func2_1_1(ByVal x As Double) As Double
'原方程的求导后
func2_1_1 = 2 * x - 1
If func2_1_1 = 0 Then func2_1_1 = 0.00000001 '避免因为以0做除数而溢出
End Function
--------------------
等等,没装vb怎么办?
那你不会没有装office吧?里面有一个vba。好好利用哦。
打开excel,ALT+F11,OK!看见编辑器了吧……
以下是c语言
-------------------
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define MAX_DIEDAI_TIME 200
main()
{
int n=0;
double x=0;
double jingdu=1e-6;
double function(double x);
double d2function(double x);
double newton_diedai(double x0,int *n,do …… 此处隐藏:9499字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [文秘资料]班长职务辞职报告
- [文秘资料]完美的辞职报告
- [文秘资料]经典的员工辞职报告
- [文秘资料]医院口腔医生辞职报告
- [文秘资料]总经理辞职报告范文四篇
- [文秘资料]超市职员个人辞职报告
- [文秘资料]村妇联主任的辞职报告
- [文秘资料]辞职报告书格式
- [文秘资料]酒店辞职报告简单范文
- [文秘资料]联通的辞职报告
- [文秘资料]2017最新私企员工辞职报告范文
- [文秘资料]2019年度医院基层党组织书记抓党建述职
- [文秘资料]工作时间长辞职报告
- [文秘资料]辞职报告怎么写出来
- [文秘资料]个人能力原因辞职报告
- [文秘资料]网络工程师辞职报告
- [文秘资料]项目部辞职报告
- [文秘资料]缝纫工辞职报告怎么写
- [文秘资料]XXX州委书记述职报告
- [文秘资料]抓基层党建工作述职报告
- (王虎应老师讲课记录)六爻理象思维
- 八个常见投影机故障排除法
- 质量专业综合知识(中级)第一章质量管理
- 煤矿班组建设实施意见
- 我国快餐业与肯德基经营模式的比较与分
- 汽车保险杠模具标准化模架技术工艺研究
- 汽车二级维护作业团体赛比赛规程
- 装卸搬运工安全操作规程
- 高效的工作方法-刘铁
- 依据《生产安全事故报告和调查处理条例
- 2015专业PS夜景亮化效果图制作教程
- 企业劳动定额定员浅析
- 中枢神经系统医学影像学本科五年制第五
- 长城汽车参观探营第三站:研发试验中心
- 小升初语文专项训练
- 建筑工程质量检测资质分类与等级标准
- 周燕珉-我国养老社区的发展现状与规划
- 《生命里最后的读书会》读后感
- 实验室管理评审报告
- CCNA思科网院教程精华之网络基础知识




