回 帖 发 新 帖 刷新版面

主题:编程出现问题???

function output=fun(X)
output(1)=X(4).*cos(3.1394+X(2))-X(4)*cos(1.6711+X(2)-X(1))/X(5)+(X(4)^2+X(5)^2+1-X(3)^2)/2/X(5)-cos(1.4683+X(1));
output(2)=X(4)*cos(24.3339+X(2))-X(4)*cos(11.9675+X(2)-X(1))/X(5)+(X(4)^2+X(5)^2+1-X(3)^2)/2/X(5)-cos(12.3664+X(1));
output(3)=X(4)*cos(52.6502+X(2))-X(4)*cos(22.6502+X(2)-X(1))/X(5)+(X(4)^2+X(5)^2+1-X(3)^2)/2/X(5)-cos(30.0000+X(1));
output(4)=X(4)*cos(75.8836+X(2))-X(4)*cos(28.2500+X(2)-X(1))/X(5)+(X(4)^2+X(5)^2+1-X(3)^2)/2/X(5)-cos(47.6336+X(1));
output(5)=X(4)*cos(88.0075+X(2))-X(4)*cos(29.8758+X(2)-X(1))/X(5)+(X(4)^2+X(5)^2+1-X(3)^2)/2/X(5)-cos(58.5317+X(1));
  
请教各位高手,这个程序哪有错误?运行时老提醒Error in ==> fun at 2
output(1)=X(4).*cos(3.1394+X(2))-X(4)*cos(1.6711+X(2)-X(1))/X(5)+(X(4)^2+X(5)^2+1-X(3)^2)/2/X(5)-cos(1.4683+X(1));
或者有没有简单的编辑方法?
十分感谢,我是刚接触matlab,很多东西都不懂。希望高手指点!!!

回复列表 (共5个回复)

沙发

请楼主注意,之所以创建函数文件,是用来调用的。函数文件的形式一般为:
function [OutputVariables]=FunctionName[InputVariables]
% Comments
Expression(s)
楼主的程序中,X之前没有没有定义,运行时当然要出错了。
如果在调用程序中定义了X的值,如X=[……](1*n),再调用fun函数,应该就没有问题了。
我随便写了点,如下:
clc 
clear all
x=[1 2 3 4 5];
c=fun(x)
命令窗口输出结果为:
c =
    6.4515    3.3119    1.0274    0.6403    1.7823

板凳


十分感谢您的评论,不过我是想求出X,这个算法是仿造书上说的非线性方程数值解的算法,不过老是出错,您能教我一下:怎么求非线性方程数值解的方法吗?谢谢[em1]

3 楼

你仿造书的时候肯定漏了引号‘’,这是至关重要的,因为fsolve是检索字符串的,而不是函数句柄。
改下成这样
>> X=[1 2 3 4 5];
>> [x y,c,d]=fsolve('fun',X)
Maximum number of function evaluations reached:
 increase options.MaxFunEvals.

x =

  1.0e+005 *

   -0.0000    0.0000    3.6154    0.0000    3.6154


y =

    0.1185    0.0043   -0.1547    0.2541   -0.2219


c =

     0


d = 

       iterations: 86
        funcCount: 502
        algorithm: 'trust-region dogleg'
    firstorderopt: 1.8753e-004
          message: [1x78 char]

4 楼


fsolve(@li_06261,[0.1 0.1 -0.1],optimset('fsolve'))
这样写对吗?
关键是M文件老是出错????

5 楼

我都看出问题了,fsolve(@li_06261,[0.1 0.1 -0.1],optimset('fsolve'))
里面,输入是[0.1 0.1 -0.1],这是三位的阿,而函数里面是五维的,我晕。。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册