声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 6366|回复: 9

[编程技巧] 求教matlab关于feval函数地使用

[复制链接]
发表于 2007-5-20 16:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
老师布置作业:编写连续函数最佳平方逼近的算法程序
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=[1];
    return;
elseif t==1
    L=[1 0];
    return;
else
    p0=[1];
    p1=[1 0];
    temp=[1 0];
       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=[0.5555555556, 0.5555555556, 0.8888888888];
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)
回复
分享到:

使用道具 举报

发表于 2007-5-20 17:20 | 显示全部楼层
请将 mmpadd 贴一下,以便他人调试.
 楼主| 发表于 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=[zeros(1,nb-na) a]+[zeros(1,na-nb) b] ;%add zeros as necessary
发表于 2007-5-20 23:16 | 显示全部楼层
你的程序有几个地方需要修改:
%%%%%%%%%%%%%%%
1. f=sym('e^x');---写法明显有问题,sym 去掉,e^x 应写成 exp(x);
2. 在 quad 前加一句: f=inline(f).--- 即可得到结果.
%%%%%%%%%%%%%%%

评分

1

查看全部评分

 楼主| 发表于 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 编辑 ]
发表于 2007-5-21 13:02 | 显示全部楼层
原帖由 liuxiangyangpc 于 2007-5-21 12:20 发表
首先 谢谢您对我地帮助,照您的方法,问题没有解决啊
在主程序prog1中,m是一个字符表达式的乘法计算啊,不能象你那样改成exp(x)啊
本来我想f表示成input('please input a hanshu string','s'),让用户自己指 ...



用户输入和程序执行是两回事,要不你不要使用matlab,否则必须按照编程的要求去做,即只能 exp(x)
发表于 2007-5-21 14:10 | 显示全部楼层
结果如下,还有什么问题请讲清楚一些.
%%%%%%%%%%%%%%%%%%
m =

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

ans =
    0.1401
%%%%%%%%%%%%%%%%%%
 楼主| 发表于 2007-5-21 18:58 | 显示全部楼层

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

我怎么得不到你的结果啊 ,能不能把你的代码发出来啊
f=inline(f) 放到那里啊
 楼主| 发表于 2007-5-22 12:36 | 显示全部楼层

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

发表于 2012-7-19 08:20 | 显示全部楼层
高人啊,这个函数是做什么的,没看出来啊?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-11 00:44 , Processed in 0.079844 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表