liuxiangyangpc 发表于 2007-5-20 16:52

求教matlab关于feval函数地使用

老师布置作业:编写连续函数最佳平方逼近的算法程序
1、编写了通用的高斯-勒让德求积公式中用到了feval函数
function quad=gauss(f,a,b,X,A)
% f是被积函数.
% a和b分别为积分的上下限.
% X是节点的横坐标构成的向量.
% A是系数构成的向量.
% 输出所求积分值.
N=length(X);
T=zeros(1,N);
T=(a+b)/2+((b-a)/2)*X;
quad=((b-a)/2)*sum(A.*feval(f,T));
2、编写了求解Lengendre多项式3函数,输入项数 返回多项式矢量
function L=Lengendre(t)
% 产生Lengendre多项式.
% t是项数数值
% 输出Lengendre的第t项的多项式系数行向量.
if t==0
    L=;
    return;
elseif t==1
    L=;
    return;
else
    p0=;
    p1=;
    temp=;
       for k=1:1:t-1
          p2= mmpadd((2*k+1)/(k+1)*conv(p1,temp),-k/(k+1)*p0);
       % p2=(2*k+1)/(k+1)*conv(p1,temp)-k/(k+1)*p0;
      p0=p1;
      p1=p2;
    end
end
L=p2;
3。然后编写了主程序prog1
a=-1;
b=1;
f=sym('e^x');
X=[-0.7745966692, 0.7745966692, 0];
A=;
m=poly2sym(Lengendre(2))*f
gauss(m,a,b,X,A)

总是出现如下错误提示

??? Error using ==> feval
Argument must contain a string or function_handle.

Error in ==> C:\MATLAB6p1\work\gauss.m
On line 10==> quad=((b-a)/2)*sum(A.*feval(f,T));

Error in ==> C:\MATLAB6p1\work\prog1.m
On line 16==> gauss(m,a,b,X,A)

xjzuo 发表于 2007-5-20 17:20

请将 mmpadd 贴一下,以便他人调试.

liuxiangyangpc 发表于 2007-5-20 21:46

mmpadd 函数 不好意思忘了

function p=mmpadd(a,b)

%MMPADD Polynomial addition.

%MMPADD(A,B) adds the polynomial A and B

if nargin<2 %在函数体内获得实际输入的变量的个数

error(' Not enough input arguments ')

end

a=a(:).' ;%make sure inputs are polynomial row vectors

b=b(:).' ;

na=length(a) ;%find lengths of a and b

nb=length(b) ;

p=+ ;%add zeros as necessary

xjzuo 发表于 2007-5-20 23:16

你的程序有几个地方需要修改:
%%%%%%%%%%%%%%%
1. f=sym('e^x');---写法明显有问题,sym 去掉,e^x 应写成 exp(x);
2. 在 quad 前加一句: f=inline(f).--- 即可得到结果.
%%%%%%%%%%%%%%%

liuxiangyangpc 发表于 2007-5-21 12:20

您再关注一下

首先 谢谢您对我地帮助,照您的方法,问题没有解决啊
在主程序prog1中,m是一个字符表达式的乘法计算啊,不能象你那样改成exp(x)啊
本来我想f表示成input('please input a hanshu string','s'),让用户自己指定函数表达式地
f=sym('e^x');
m=poly2sym(Lengendre(2))*f
gauss(m,a,b,X,A)

[ 本帖最后由 eight 于 2007-5-21 13:01 编辑 ]

eight 发表于 2007-5-21 13:02

原帖由 liuxiangyangpc 于 2007-5-21 12:20 发表 http://www.chinavib.com/forum/images/common/back.gif
首先 谢谢您对我地帮助,照您的方法,问题没有解决啊
在主程序prog1中,m是一个字符表达式的乘法计算啊,不能象你那样改成exp(x)啊
本来我想f表示成input('please input a hanshu string','s'),让用户自己指 ...


用户输入和程序执行是两回事,要不你不要使用matlab,否则必须按照编程的要求去做,即只能 exp(x)

xjzuo 发表于 2007-5-21 14:10

结果如下,还有什么问题请讲清楚一些.
%%%%%%%%%%%%%%%%%%
m =

(3/2*x^2-1/2)*exp(x)

ans =
    0.1401
%%%%%%%%%%%%%%%%%%

liuxiangyangpc 发表于 2007-5-21 18:58

我怎么得不到你的结果啊 ,能不能把你的代码发出来啊

我怎么得不到你的结果啊 ,能不能把你的代码发出来啊
f=inline(f) 放到那里啊

liuxiangyangpc 发表于 2007-5-22 12:36

我调试不出来啊 困扰了几天拉

twb0624 发表于 2012-7-19 08:20

高人啊,这个函数是做什么的,没看出来啊?
页: [1]
查看完整版本: 求教matlab关于feval函数地使用