24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1176  |  回复: 15
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

309065816

木虫 (正式写手)

[求助] matlab小白,发帖求助,编好的程序出了问题,附编程

从文献和书上找到合适的程序,但是抄到MATLAB里面却有问题。都是相同的问题,h=(b-a)/n, b没有含义。附上题目,两个原程序和我抄的程序,均是梯形法,应该没抄错吧?
程序1:
function [q,step] = CombineTraprl(f,a,b,eps)
%被积函数: f;
%积分区间左端点:a;
%积分区间右端点:b;
%eps 精度;
%积分结果:q;
%step 积分的子区间数;
if(nargin==3);
    eps=1.0e-4;
end
n=1;
h=(b-a)/2;
q1=0;
q2=(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b))/h;
while abs(q2-q1)>eps;
    n=n+1;
    h=(b-a)/n;
    q1=q2;
    q2=0;
    for i=0:n-1;
        x=a+h*i;
        x1=x+h;
        q2=q2+(h/2)*(subs(sym(f),findsym(sym(f)),x)+...
            subs(sym(f),findsym(sym(f)),x1));
    end
end
q=q2;
step=n;
??? Input argument "b" is undefined.

Error in ==> CombineTraprl at 12
h=(b-a)/2;

>>

程序2:
function y = trapm(n,a,b)
format long
h = (b - a)/n;
sym x fx
fx = sqrt(4 - x^2);
f0 = subs(fx,'x',a);
fn = subs(fx,'x',b);
sum = f0;
for i = 1:n-1
    xi = a + i* h;
    fi = subs(fx,'x',xi);
    sum = sum + 2* fi;
end
sum = sum + fn;
y = h* sum/2;

??? Input argument "b" is undefined.

Error in ==> trapm at 3
h = (b - a)/n;

>>
matlab小白,发帖求助,编好的程序出了问题,附编程
题目.jpg


matlab小白,发帖求助,编好的程序出了问题,附编程-1
程序1.jpg


matlab小白,发帖求助,编好的程序出了问题,附编程-2
程序2.jpg

[ Last edited by 309065816 on 2013-7-10 at 20:54 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2013-07-11 04:11:09
309065816: 金币+2 2013-07-11 09:15:27
你的a,b,f都没有被定义。
a和b是积分区间的左右端点数值。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
3楼2013-07-10 21:52:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 16 个回答

309065816

木虫 (正式写手)

在线坐等解答。。。
2楼2013-07-10 20:55:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

★ ★ ★ ★
jjdg: 金币+1, 感谢解释 2013-07-11 04:11:26
309065816: 金币+3 2013-07-11 09:15:33
引用回帖:
2楼: Originally posted by 309065816 at 2013-07-10 20:55:21
在线坐等解答。。。

这两个程序,都不是直接运行的。
而是把m文件分别保存在MATLAB的工作目录下,然后按照格式调用。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
4楼2013-07-10 21:58:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
309065816(jjdg代发): 金币+5, 辛苦了 2013-07-11 04:11:54
309065816: 金币+10, ★★★★★最佳答案 2013-07-11 09:15:43
原文的程序没有错,出现问题,在于其一程序抄写不一致,你抄写“syms……”的时候,少了一个字母"s";其二程序调用方式不对,不是直接运行这些m文件而应该是按调用格式来。
比如,原文中梯形法的程序编写得很巧妙,只需要3个参数:积分的左右端点数值和子区间数目,就可以得到计算结果。把trapm.m存到MATLAB的工作目录下,在主窗口输入: trapm(10000,0,3*pi/2)
即得结果,如附图。
matlab小白,发帖求助,编好的程序出了问题,附编程-3
附图1.jpg

MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
5楼2013-07-10 22:20:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见