请教,Matlab的fsolve函数怎么用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教,Matlab的fsolve函数怎么用相关的知识,希望对你有一定的参考价值。
fsolve是采用最小二乘法来求解非线性方程。它的一般求解方式为:X=fsolve(fun,X0,options)
其中,fun是要求解的非线性方程,X0是变量初值,options由optimset函数产生的结构体,用于对优化参数的设置,可以省略(采用默认值)。
Fsolve可以求解简单的一维非线性方程,如:
x = fsolve(@myfun,[0.5 2 4],optimset('Display','iter')); %求解在初值分别为0.5,2和4时方程的解
其中,函数myfun的定义为:
function F = myfun(x)
F = sin(x);
Fsolve还可以求解大型的非线性方程组,如
x0 = [51.6;rand;unifrnd(-1,1);rand];
h=optimset;
h.MaxFunEvals=20000;
h.MaxIter=5000;
h.Display='off';
[p,fval] = fsolve(@f,x0,options);
此时,方程组可以写成矩阵形式:
function F=f(x)
F=[x(1)+x(2)*(1-exp(-(x(3)*(0)^x(4))))-51.61;
x(1)+x(2)*(1-exp(-(x(3)*(9.78)^x(4))))-51.91;
x(1)+x(2)*(1-exp(-(x(3)*(30.68)^x(4))))-53.27;
x(1)+x(2)*(1-exp(-(x(3)*(59.7)^x(4))))-59.68;]; 参考技术A fsolve是MATLAB软件的一条函数。它采用最小二乘法来求解非线性方程。它的一般求解方式为:X=FSOLVE(FUN,X0,OPTIONS)。
matlab fsolve函数的应用举例如下,
求下列非线性方程组在(0.5,0.5) 附近的数值解。
(1) 建立函数文件myfun.m。
function q=myfun(p)
x=p(1);
y=p(2);
q(1)=x-0.6*sin(x)-0.3*cos(y);
q(2)=y-0.6*cos(x)+0.3*sin(y);
(2) 在给定的初值x0=0.5,y0=0.5下,调用fsolve函数求方程的根。
x=fsolve('myfun',[0.5,0.5],optimset('Display','off'))
x =
0.6354
0.3734
将求得的解代回原方程,可以检验结果是否正确,命令如下:
q=myfun(x)
q =
1.0e-009 *
0.2375 0.2957
可见得到了较高精度的结果。 参考技术B x = fsolve('2*x^2+7*x+5',0)
最简单的一个用法,前面是表达式,后面是初始搜索值,这个函数是从初始搜索点开始搜索,找到一个满足条件的就停止,因此只能找到一个解。改变初始搜索点,就可以找到不同的解 参考技术C x=fsolve(fun,x0)求解fun(x)=0的解,x0是初值,fun是函数,x就是解
因为fsolve使用迭代法求解方程的,所以总要有个迭代的初值吧,这个初值就是你给的x0。
比如解方程组
x(1).^2+x(2).^2=1
x(1)=2*x(2)
可以写成
f=@(x)([x(1).^2+x(2).^2-1;x(1)-2*x(2)])
x=fsolve(f,[1 1])
这里[1 1]就是初值,其实初值一般情况下可以随便给的。 参考技术D 题主的这个问题有点莫名其妙:
1、定义的fun函数根本没见调用啊?
2、在哪里、怎么样fsolve的?
3、报了什么错?
Matlab中fsolve传递系数变量
比如AX= b,求解x,但是要找不同b下的x,100个b。
fsolve(‘fun,[X0,b])这样是不行的,因为这样的话b也当成了变量,也会变。
两种方法
1.全局变量
global b;多个的话 中间用空格不用都好。
2.函数句柄
@一直无法识别。
全局变量挺好用的。
以上是关于请教,Matlab的fsolve函数怎么用的主要内容,如果未能解决你的问题,请参考以下文章