matlab编写 牛顿法解非线性方程的程序
答案:1 悬赏:30
解决时间 2021-03-05 09:26
- 提问者网友:心牵心
- 2021-03-05 06:38
matlab编写 牛顿法解非线性方程的程序
最佳答案
- 二级知识专家网友:何以畏孤独
- 2021-03-05 08:01
这个牛顿法程序对吗?给你一个可用的:function main()
clc; clear all;
f = @(x)log(x+sin(x));
df = @(x)(1+cos(x))/(x+sin(x));
x0 = 0.1;
x = TestNewton(f, df, x0)function x = TestNewton(fname, dfname, x0, e, N)
% 用途:Newton迭代法解非线性方程f(x)=0
% fname和dfname分别表示f(x)及其导函数的M函数句柄或内嵌函数表达式
% x0为迭代初值,e为精度(默认值1e-7)
% x为返回数值解,并显示计算过程,设置迭代次数上限N以防发散(默认500次)if nargin < 5
N = 500;
end
if nargin < 4
e = 1e-7;
end
x = x0;
x0 = x+2*e;
k = 0;
fprintf('x[%d]=%12.9f\n', k, x)
while abs(x0-x)>e && k k = k+1;
x0 = x;
x = x0 - feval(fname,x0)/feval(dfname,x0);
fprintf('x[%d]=%12.9f\n', k, x)
end
if k == N
fprintf('已达到迭代次数上限');
end
结果:x[0]= 0.100000000
x[1]= 0.261295899
x[2]= 0.434317505
x[3]= 0.504499011
x[4]= 0.510928606
x[5]= 0.510973427
x[6]= 0.510973429x =0.5110>>
clc; clear all;
f = @(x)log(x+sin(x));
df = @(x)(1+cos(x))/(x+sin(x));
x0 = 0.1;
x = TestNewton(f, df, x0)function x = TestNewton(fname, dfname, x0, e, N)
% 用途:Newton迭代法解非线性方程f(x)=0
% fname和dfname分别表示f(x)及其导函数的M函数句柄或内嵌函数表达式
% x0为迭代初值,e为精度(默认值1e-7)
% x为返回数值解,并显示计算过程,设置迭代次数上限N以防发散(默认500次)if nargin < 5
N = 500;
end
if nargin < 4
e = 1e-7;
end
x = x0;
x0 = x+2*e;
k = 0;
fprintf('x[%d]=%12.9f\n', k, x)
while abs(x0-x)>e && k
x0 = x;
x = x0 - feval(fname,x0)/feval(dfname,x0);
fprintf('x[%d]=%12.9f\n', k, x)
end
if k == N
fprintf('已达到迭代次数上限');
end
结果:x[0]= 0.100000000
x[1]= 0.261295899
x[2]= 0.434317505
x[3]= 0.504499011
x[4]= 0.510928606
x[5]= 0.510973427
x[6]= 0.510973429x =0.5110>>
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |