悠秀儿 2024-02-29 11:40 采纳率: 50%
浏览 8
已结题

用MATLAB画随t变化的函数图像,式中包含了累加求和,出现报错,不知道怎么办了,请解释一下

img

代码如下

close all;
clear;
clc;
 
h=0.00125;
d=1.5;
muw=1.2;
sgmw=0.2;
mub=8.4823e-9;
sgmb=6.0016e-10;
fai=0;
muy=1e-4;
sgmy=2e-5;
lmd=2.5e-5;
 
tx=0:1:5000;
syms n
 
%第一部分
m1=normcdf(d,muw,sgmw);
m4=m1.^n;
 
%第二部分
mu1=mub.*tx+fai+muy.*n;
sgm1=((sgmb.*tx).^2+lmd.^2.*n).^0.5;
m2=normcdf(h,mu1,sgm1);
 
%第三部分
m3=(exp(-lmd.*tx).*((lmd.*tx).^n))./factorial(n);
 
r1=m4.*m2.*m3;
r2=1-symsum(r1,n,0,inf);
 
plot(tx,r2,'k','LineWidth', 1.5);
set(gca,'FontSize',14,'Fontname','Times New Roman')
xlabel("Time/Day",'fontsize',14,'FontName','Times New Roman','fontweight','bold');
ylabel("R",'fontsize',14,'FontName','Times New Roman','fontweight','bold','Fontangle','italic');


错误信息如下:

错误使用 symengine
Unable to prove '1/800 < n/10000 &
((3022314549036573*n)/4835703278458516698824704)^(1/2) == 0'
literally. Use 'isAlways' to test the statement
mathematically.

出错 sym/subsindex (第 1027 行)
                X = find(mupadmex('symobj::logical',A.s,9)) - 1;

出错 sym/privsubsasgn (第 1307 行)
            L_tilde2 = builtin('subsasgn',L_tilde,struct('type','()','subs',{varargin}),R_tilde);

出错 索引 (第 1138 行)
            C = privsubsasgn(L,R,inds{:});

出错 normcdf>localnormcdf (第 109 行)
    p(sigma==0 & x<mu) = 0;

出错 normcdf (第 50 行)
[varargout{1:max(1,nargout)}] = localnormcdf(uflag,x,varargin{:});

出错 CCF3 (第 26 行)
m2=normcdf(h,mu1,sgm1);
 

  • 写回答

7条回答 默认 最新

  • 小明爱吃火锅 2024-02-29 11:59
    关注

    引用文心一言及回答:从错误信息来看,问题出在normcdf函数的使用上。normcdf函数用于计算正态分布的累积分布函数,但在这里,你使用了符号变量n作为参数,这可能导致了错误。

    首先,我们需要明确你的目标。你想要计算一个随时间变化的函数图像,其中包含了累加求和。为了实现这个目标,我们需要对n进行离散化,然后使用for循环进行累加求和。以下是修改后的代码:

    close all;
    clear;
    clc;
    
    h = 0.00125;
    d = 1.5;
    muw = 1.2;
    sgmw = 0.2;
    mub = 8.4823e-9;
    sgmb = 6.0016e-10;
    fai = 0;
    muy = 1e-4;
    sgmy = 2e-5;
    lmd = 2.5e-5;
    
    tx = 0:1:5000;
    n_max = 100; % 设置累加求和的最大次数
    
    % 初始化结果数组
    r2 = zeros(size(tx));
    
    % 第一部分
    m1 = normcdf(d, muw, sgmw);
    
    for n = 0:n_max
        % 第二部分
        mu1 = mub .* tx + fai + muy .* n;
        sgm1 = ((sgmb .* tx) .^ 2 + lmd .^ 2 .* n) .^ 0.5;
        m2 = normcdf(h, mu1, sgm1);
        
        % 第三部分
        m3 = exp(-lmd .* tx) .* ((lmd .* tx) .^ n) ./ factorial(n);
        
        % 累加求和
        r1 = m1 .^ n .* m2 .* m3;
        r2 = r2 + r1;
    end
    
    % 计算1-r2
    r2 = 1 - r2;
    
    plot(tx, r2, 'k', 'LineWidth', 1.5);
    set(gca, 'FontSize', 14, 'Fontname', 'Times New Roman')
    xlabel("Time/Day", 'fontsize', 14, 'FontName', 'Times New Roman', 'fontweight', 'bold');
    ylabel("R", 'fontsize', 14, 'FontName', 'Times New Roman', 'fontweight', 'bold', 'Fontangle', 'italic');
    

    这个修改后的代码使用了for循环进行累加求和,避免了使用符号变量n。同时,我将r2的计算方式改为了1-r2,以便在最后的图像中显示出正确的结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月29日
  • 已采纳回答 2月29日
  • 创建了问题 2月29日