Lee Goal 2022-12-13 12:18 采纳率: 100%
浏览 62
已结题

函数子程序中二重积分书写

在函数子程序中运用函数句柄求二重积分值
这是用于fminsearch函数求最小值的被求函数,需要写一个二重积分,里面含有变量x,这里类似一个局部函数的形式
function [U_s,Uadhesion,Ubending,Uion,constrain1,constrain2] = U_s(x)
global D rou E u0 u1 x1 x2 A B N F G
Nf = 1000;
t = linspace(0,x2,Nf);
s = linspace(0,x2,Nf);
yplus = 0.5*(u1-u0)/x2*(t+s)+u0;
for i = 1:N
     yplus = yplus+x(i)*(sin(i*t/x2)+sin(i*s/x2));
end
V = @(t,s)A./(sqrt((t-s).^2+(yplus(t,s)).^2)).^12-B./(sqrt((t-s).^2+(yplus(t,s)).^2)).^6;
Uadhesion = rou^2*integral2(V,x1,x2,x1,x2);

报错: 输入参数的数目不足。
出错 U_s (第 24 行)
yplus = yplus+x(i)(sin(it/x2)+sin(i*s/x2));

主要问题在于复合函数,求积分一直出错。这里做不到直接代入,因为有函数迭代求和;也无法做局部函数,因为带有x(i)。
要求出这部分Uadhesion的值,含自变量x

img

  • 写回答

2条回答 默认 最新

  • |__WhoAmI__| 2022-12-13 12:49
    关注

    在您的代码中,您在定义了 yplus 后,再次使用 yplus 作为函数参数传递给 V 函数,但是在这里您并没有给出 yplus 的参数。这可能是导致报错的原因之一。

    另一个可能导致问题的原因是,您在调用 integral2 函数时,没有传递正确的函数句柄。在您的代码中,V 函数是一个匿名函数,接受两个参数 t 和 s,因此在调用 integral2 时,应该传递 V(t,s) 而不是 V。

    正确的写法应该是这样的:

    Uadhesion = rou^2 * integral2(@(t,s)V(t,s),x1,x2,x1,x2);

    这样,我们就能正确地计算出积分值了。

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

报告相同问题?

问题事件

  • 系统已结题 12月21日
  • 已采纳回答 12月13日
  • 赞助了问题酬金15元 12月13日
  • 创建了问题 12月13日

悬赏问题

  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?