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 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 ARIMA模型时间序列预测用pathon解决
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序,怎么查看客户esp32板子上程序及烧录地址
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)