对应写的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
为什么运行不出来,求大神救本学渣一命