matlab fsolve函数应用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab fsolve函数应用相关的知识,希望对你有一定的参考价值。
我想求出x^2+y^2+30*y=175,x^2+y^2-90*x=-800中x,y,的解请问matlab的程序应该怎么呀?
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
可见得到了较高精度的结果。 参考技术A function h=afang(xy) % 保存为 afang.m 文件
x=xy(1);y=xy(2);
h=[x^2+y^2+30*y-175;
x^2+y^2-90*x+800];
---------------------------------------------------------
[x,fval,exitflag]=fsolve('afang',[1;1])
% x 为所求的解
%fval为解代入方程的验证结果
% exitflag=1表示函数收敛于解;反之,=0追问
是哪里出错了呢?
function h=afang(xy) % 保存为 afang.m 文件
x=xy(1);y=xy(2);
h=[x^2+y^2+30*y-175;
x^2+y^2-90*x+800];
MATLAB 中的 fsolve 错误
【中文标题】MATLAB 中的 fsolve 错误【英文标题】:fsolve error in MATLAB 【发布时间】:2014-08-24 13:31:10 【问题描述】:我正在处理以下代码:
function opemployment=eqns(unknown);
global kappa varphi lgamma beta r delta s x b e theta v;
h=unknown(1);
gamma=unknown(2);
opemployment(1)=(h^(gamma-1))*((1-kappa)*((lgamma*(varphi^beta))/(gamma*kappa*beta+1-kappa))*h^(gamma*beta-gamma)-(r+delta+s)*(s^(gamma-1))*x^(-gamma));
opemployment(2)=(1-kappa)*(b-e+(kappa/(1-kappa))*theta*v^(gamma-1));
然后调用:
close all; clear all;
global kappa varphi lgamma beta r delta s x b e theta v;
kappa = 0.1;
varphi = 2;
lgamma = 3;
beta = 0.9;
r = 2;
delta = 2 ;
s = 3;
x = 5;
b = 4;
e =3;
theta = 3 ;
v = 2;
guess = [0.7,0.3];
sol=fsolve('eqns',guess)
然而,我收到以下错误: '使用 feval 时出错 'double' 类型的输入参数的未定义函数 'eqns'。
Error in fsolve (line 217)
fuser = feval(funfcn3,x,varargin:);
原因:
Failure in initial user-supplied objective function evaluation.
FSOLVE cannot continue.
我完全是 MATLAB 初学者,不知道错误出在哪里。
【问题讨论】:
【参考方案1】:您没有指定fsolve
的第一个参数正确。当您对如何调用函数有疑问时,查看文档总是非常有用的。对于fsolve
,这里是:http://www.mathworks.com/help/optim/ug/fsolve.html
在您的情况下,对于您的 fsolve
声明,您必须这样做:
sol=fsolve(@eqns,guess)
fsolve
需要您要解决的函数的函数句柄,而不是函数本身的实际名称。
【讨论】:
以上是关于matlab fsolve函数应用的主要内容,如果未能解决你的问题,请参考以下文章