求问大神 matlab对一直曲线线性拟合运行不出来

对应写的matlab代码:

function [Ma, u_values, M_values] = approximate_M(umin, umax, epsilon)
    % 初始化参数
    m = 2; % 初始等分
    umin=1/25;
    umax=1/12;
    epsilon=0.001;
    done = false; % 循环控制

    while ~done
        % 计算等分点上的u值和M(u)值
        u_values = linspace(umin, umax, m+1);
        M_values = 2.5 ./ (15^3 * u_values.^2);
        
        % 计算最大误差
        max_error = 0;
        for k = 1:m
            uik = u_values(k);
            uik_plus_1 = u_values(k+1);
            M_uik = M_values(k);
            M_uik_plus_1 = M_values(k+1);
            M_mid = 2.5 / (15^3 * ((uik + uik_plus_1) / 2)^2);
            error = abs(((M_uik - M_uik_plus_1) / 2 - M_mid) / M_mid);
            if error > max_error
                max_error = error;
            end
        end
        
        % 检查是否满足结束条件
        if max_error <= epsilon
            done = true;
        else
            m = m + 1; % 增加分段数
        end
    end
    
    % 构造分段函数Ma
    Ma = @(ui) zeros(size(ui));
    for k = 1:m
        uik = u_values(k);
        uik_plus_1 = u_values(k+1);
        M_uik = M_values(k);
        M_uik_plus_1 = M_values(k+1);
        % 对每个分段定义Ma函数
        Ma = @(ui) Ma(ui) + ((ui >= uik & ui < uik_plus_1) .* (M_uik + (M_uik_plus_1 - M_uik) * (ui - uik) / (uik_plus_1 - uik)));
    end
endfunction [Ma, u_values, M_values] = approximate_M(umin, umax, epsilon)
    % 初始化参数
    m = 2; % 初始等分
    done = false; % 循环控制

    while ~done
        % 计算等分点上的u值和M(u)值
        u_values = linspace(umin, umax, m+1);
        M_values = 2.5 ./ (15^3 * u_values.^2);
        
        % 计算最大误差
        max_error = 0;
        for k = 1:m
            uik = u_values(k);
            uik_plus_1 = u_values(k+1);
            M_uik = M_values(k);
            M_uik_plus_1 = M_values(k+1);
            M_mid = 2.5 / (15^3 * ((uik + uik_plus_1) / 2)^2);
            error = abs(((M_uik - M_uik_plus_1) / 2 - M_mid) / M_mid);
            if error > max_error
                max_error = error;
            end
        end
        
        % 检查是否满足结束条件
        if max_error <= epsilon
            done = true;
        else
            m = m + 1; % 增加分段数
        end
    end
    
    % 构造分段函数Ma
    Ma = @(ui) zeros(size(ui));
    for k = 1:m
        uik = u_values(k);
        uik_plus_1 = u_values(k+1);
        M_uik = M_values(k);
        M_uik_plus_1 = M_values(k+1);
        % 对每个分段定义Ma函数
        Ma = @(ui) Ma(ui) + ((ui >= uik & ui < uik_plus_1) .* (M_uik + (M_uik_plus_1 - M_uik) * (ui - uik) / (uik_plus_1 - uik)));
    end
end

为什么运行不出来,求大神救本学渣一命

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值