[已解决] 关于曲面求梯度的问题

[复制链接]
fromtheglow 发表于 6 天前
本帖最后由 fromtheglow 于 2021-5-1 14:05 编辑
  1. clear;
  2. clc;
  3. syms s r
  4. x=-200:10:200;
  5. y=-110:10:110;
  6. [X,Y]=meshgrid(x,y);
  7. f1=0.5*((70-150*(1-exp(14)))/(150*exp(3)));
  8. f2=0.5*((4.5-150*(1-exp(0.09)))/(150*exp(3)));
  9. for ii = 1:length(x)
  10.     for jj = 1:length(y)
  11.         w1=1.9.*int(int((1/780).*exp(-pi.*((x(ii)-s).^2+(y(jj)-r).^2)./780),r,0,60),s,0,65.5);
  12.         w2=1.9.*int(int((1/780).*exp(-pi.*((x(ii)-s).^2+(y(jj)-r).^2)/780),r,0,60),s,65.5,70);
  13.         U(ii,jj)=w1*f1+w2*f2;         
  14.         UX = gradient(U);%求U在x方向上的梯度
  15.         Z=0.3*UX;
  16.     end
  17. end
  18. mesh(X,Y,double(Z)');
复制代码

报错
错误使用 sym/gradient (line 21)
The first argument must be a scalar.

这是求一个曲面在x方向上的梯度问题,目的是生成一个关于该曲面的三维梯度图,谢谢各位


最佳答案


20141303 发表于 6 天前
仅供参考
  1. clear;
  2. clc;
  3. syms s r
  4. x=-200:10:200;
  5. y=-110:10:110;
  6. [X,Y]=meshgrid(x,y);
  7. f1=0.5*((70-150*(1-exp(14)))/(150*exp(3)));
  8. f2=0.5*((4.5-150*(1-exp(0.09)))/(150*exp(3)));
  9. for ii = 1:length(x)
  10.     for jj = 1:length(y)
  11.         w1=double(1.9.*int(int((1/780).*exp(-pi.*((x(ii)-s).^2+(y(jj)-r).^2)./780),r,0,60),s,0,65.5));
  12.         w2=double(1.9.*int(int((1/780).*exp(-pi.*((x(ii)-s).^2+(y(jj)-r).^2)/780),r,0,60),s,65.5,70));
  13.         U(ii,jj)=w1*f1+w2*f2;
  14.     end
  15. end
  16. [UX,UY]= gradient(U);%求U在x方向上的梯度
  17. Z=0.3*UX;
  18. mesh(X,Y,double(Z)');
复制代码
回复此楼

3 条回复


20141303 发表于 6 天前
仅供参考
  1. clear;
  2. clc;
  3. syms s r
  4. x=-200:10:200;
  5. y=-110:10:110;
  6. [X,Y]=meshgrid(x,y);
  7. f1=0.5*((70-150*(1-exp(14)))/(150*exp(3)));
  8. f2=0.5*((4.5-150*(1-exp(0.09)))/(150*exp(3)));
  9. for ii = 1:length(x)
  10.     for jj = 1:length(y)
  11.         w1=double(1.9.*int(int((1/780).*exp(-pi.*((x(ii)-s).^2+(y(jj)-r).^2)./780),r,0,60),s,0,65.5));
  12.         w2=double(1.9.*int(int((1/780).*exp(-pi.*((x(ii)-s).^2+(y(jj)-r).^2)/780),r,0,60),s,65.5,70));
  13.         U(ii,jj)=w1*f1+w2*f2;
  14.     end
  15. end
  16. [UX,UY]= gradient(U);%求U在x方向上的梯度
  17. Z=0.3*UX;
  18. mesh(X,Y,double(Z)');
复制代码
回复此楼

fromtheglow 发表于 6 天前

问题解决了,谢谢您,同时可以请教一下原因吗,我还是想继续深入学习这个软件。

20141303 发表于 6 天前
仅供参考,gradient的用法问题,具体可以参考帮助文档
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表