首先,建立原函数的自定义函数文件
function y = fun(x)
y=x^4-3x^3+5cos(x)+8;
其次,建立导函数的自定义函数文件
function y = dfun(x)
y=4x^3-9x^2-5sin(x);
最后,用牛顿法求解
x0=1;tol=1e-6;x1=newton(x0,tol)
n =
5
x1 =
1787494463594194
验证:
x1 = 1787494463594194;x1^4-3x1^3+5cos(x1)+8
ans =
-3552713678800501e-015 (=0)
Newton's method is the classic algorithm for finding roots of functions The breif introduction is written below
The analytic solution is
The code is
clear allx = zeros(1,2);
f = zeros(1,2);
tol = 1E-7;
invJ = zeros(2,2);
x(1) = 023;
x(2) = 069;
for n = 1:1:1E4
f(1) = x(1)+854/x(2)-1;
f(2) = x(1)-10/x(2);
invJ(1,1) = 10/954;
invJ(1,2) = 854/954;
invJ(2,1) = -x(2)^2/954;
invJ(2,2) = x(2)^2/954;
xn = x'-invJf';
if (abs(x(1)-xn(1))/abs(xn(1)) < tol
&& abs(x(2)-xn(2))/abs(xn(2)) < tol)
fprintf('The maximum number of iterations is %d\n', n)
disp('The solution within tolerance 1E-7 is')
disp(xn')
return;
end
x = xn';
end
disp('The solution did not converge to x-axis')
The generated result is
这是两部分代码:
function eq=exam1_5(x)
eq=(x^7+2x^5+3x^3+5x+7)/(7x^6+10x^4+9x^2+5);
这两行是函数部分,参数为x,返回值为eq。
下面的命令是在命令窗口输入的:
x0=01;
x1=x0-exam1_5(x0);
while abs(x1-x0)>00001
x0=x1;
x1=x0-exam1_5(x0);
end
运行之后,可以在workspace查看x0 x1的值,都为-08341
或则在命令窗口输入 x0 即可查看x0的值,输入 x1 即可查看x1的值。
希望采纳,设置为满意答案,谢谢。
这个牛顿法程序对吗?给你一个可用的:function main()
clc; clear all;
f = @(x)log(x+sin(x));
df = @(x)(1+cos(x))/(x+sin(x));
x0 = 01;
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+2e;
k = 0;
fprintf('x[%d]=%129f\n', k, x)
while abs(x0-x)>e && k<N
k = k+1;
x0 = x;
x = x0 - feval(fname,x0)/feval(dfname,x0);
fprintf('x[%d]=%129f\n', k, x)
end
if k == N
fprintf('已达到迭代次数上限');
end
结果:x[0]= 0100000000
x[1]= 0261295899
x[2]= 0434317505
x[3]= 0504499011
x[4]= 0510928606
x[5]= 0510973427
x[6]= 0510973429x = 05110>>
《应用最优化方法及MATLAB实现》系统讲述如何将最优化方法实现为应用软件。系统阐述了各种无约束和带约束优化问题的计算方法和程序实现,内容包括:精确/非精确一维搜索、最速下降法、牛顿/拟牛顿法、共轭梯度法、单纯形法、内点法、积极集法、序列二次规划方法等。书中包含了必要的最优化理论知识,为得到最优化方法并用程序实现做准备。书中给出的许多应用优化技术是我们的最新研究成果,给出的优化程序是以专业编程技巧实现的最优化算法。书中还给出了大量的例子和习题。《应用最优化方法及MATLAB实现》可作为高等院校自动化、控制、系统工程、工业工程、计算机、应用数学、经济、管理、化工、材料、机械、能源等相关专业学生的教材,也可作为有关研究人员和工程技术人员的参考书。
这样吧,你不要直接通过solve求解啊,可以画一个图像啊,以x的值为横坐标,行列式值为纵坐标,或者纵坐标取一下对数(如果变化范围太大),然后可以得出大致得到解的范围;最后可以通过其他方法计算更加精确的解。
希望能帮到你,我算程序就是这样实现的
用牛顿法可以求得函数f(x)=x^4-4x^3-6x^2-16x+4的最小值为-156。
牛顿法的迭代原理是 Xk+1=Xk-f(xk)/f'(xk)
基于matlab的牛顿法求解主要代码
x0=6; %初值
tol = 0001;%误差
x = newton(x0,tol); %牛顿迭代法函数
y=fun(x);
str=['f(x)=x^4-4x^3-6x^2-16x+4的最小值 ',num2str(y)];
fprintf('%s\n',str);
str=['f(x)=x^4-4x^3-6x^2-16x+4的极值点,x=',num2str(x),';y=',num2str(y)];
fprintf('%s\n',str);
运行结果,极值点,x=4;y=-156,最小值 -156
自定义函数内容如下
x0,tol,N)%改了这里
%root是系统保留字。不推荐使用。可以用exist('root')命令测试
% Newton Method
% The first parameter f is a external function with respect to viable x
% The second parameter df is the first order diffential function of fx
% x0 is initial iteration point
% tol is the tolerance of the loop
% N is the maximum number of iterations
x=x0;
f0=eval(f);df0=eval(df);
n=0;
disp(' [ n xn xn 1 fn 1 ]');
while n<=N
x1=x0-f0/df0;
x=x1;
f1=eval(f);
以上就是关于牛顿法求解 matlab实现全部的内容,包括:牛顿法求解 matlab实现、牛顿法解非线性方程组的MATLAB程序、MATLAB中用牛顿法求解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)