lyj 发表于 2007-1-21 17:19

一个求方向导数的问题

x1=0;
y1=0;
x2=1.0;
y2=0;
b=sqrt[(x2-x1)^2+(y2-y1)^2];
cos(a)=(x2-x1)/b;
sin(a)=(y2-y1)/b;
A=;
syms x y;
r=0:nr;
k1=r*pi/Lx;
k2=sqrt(k^2-k1.^2);
bo1=cos(k1*x).*exp(-i*k2*y);
box1=diff(bo1,x);
boy1=diff(bo1,y);
bon1=*

bon1是所求的方向导数,他的每个元素是由bo1中每个元素对x求导与cos(a)相乘,bo1中每个元素对y求导与sin(a)相乘,二者相加得到的。这个程序怎么出不来?高手帮忙弄一下

xjzuo 发表于 2007-1-21 17:32

回复

建议你一次将你的问题用word传上来,便于大家理解你的程序问题所在.

lyj 发表于 2007-1-21 17:56

我的程序很多,很复杂的,现在在一块一块的编,用到好多积分求导转置的问题,要解决一个数学模型求解矩阵系数的问题

xjzuo 发表于 2007-1-21 18:31

回复

再多也没关系,只要打包传一下. (如果不涉及机密的话)
我倒反而对你的问题感兴趣了:@) .

lyj 发表于 2007-1-21 19:10

好的,那我把模型给你整理一下用word传上去,你帮忙看看:@)

lyj 发表于 2007-1-23 22:20

给出了我的问题还有我编的一些程序,希望楼上感兴趣的大侠帮忙看看,有的程序运行不出来,还请指教,要实现最后的问题,我不会整和,帮忙弄下,谢谢

eight 发表于 2007-1-23 22:35

方向导数的问题可以参考论坛以下帖子:Matlab如何求方向导数

xjzuo 发表于 2007-1-24 08:46

原帖由 lyj 于 2007-1-23 22:20 发表
给出了我的问题还有我编的一些程序,希望楼上感兴趣的大侠帮忙看看,有的程序运行不出来,还请指教,要实现最后的问题,我不会整和,帮忙弄下,谢谢

虽然背景知识仍没有介绍,不过理解你的程序及不正确之处要容易多了.
你可以自己逐步编写和调试程序,有问题可以拿来讨论. 针对你的该主题贴,
修改了一下你的代码,不知是否是你所求:
%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
x1=0;
y1=0;
x2=1.0;
y2=0;
syms x y
b=sqrt((x2-x1)^2+(y2-y1)^2);
cosa=(x2-x1)/b;
sina=(y2-y1)/b;
A=[cosa sina];
nr=4;
ns=2;
Lx=1.0;
Ly=1.5;
c=340;
f=200;
k=2*pi*f/c;
r=0:nr;
k1=r*pi/Lx;
k2=sqrt(k^2-k1.^2);
bo1=cos(k1*x).*exp(-i*k2*y);
box1=diff(bo1,x)
boy1=diff(bo1,y)
bon1=[cosa sina]*
%%%%%%%%%%%%%%%%%%%%

lyj 发表于 2007-1-24 10:46

楼上你能帮我看下附件里那些程序吗?能帮我整和一下解出最后结果吗?那里边有的函数M文件还调用别的函数M文件,但是不知道为什么运行不出来

xjzuo 发表于 2007-1-24 11:25

回复

看了一下,有些地方参数要记得定义,如kb......
还有一些地方bo'(导数?)什么的不知何意,建议统一加p或其它字母标记导数.
你的程序最后每个都调试好以后,直接写成一个函数运行即可.

对于你的要求,恐怕别人很难有那么多时间去帮你一一调试,
建议自己动手,有问题再来讨论.

lyj 发表于 2007-1-24 13:07

bo'是转置,应该表示成bo.'吧?

lyj 发表于 2007-1-24 13:31

i=sqrt(-1);
s=1:4;
structure=exp(-i.^s*kb*x);
Ass=[];
x=0;
A1=structure(x);
x=1.5;
A2=structure(x);
B(x)=diff(structure,x);%结构波函数对x求导
A3=B(0);
A4=B(1.5);
Ass=

A1是structure当x=0时得到的矩阵,A2是structure当x=1.5时得到的矩阵,A3是对x求导后取零得到的矩阵,A4是对x求导后取1.5得到的矩阵,怎么运行不通呢?前边三行都能运行出来

happy 发表于 2007-1-24 14:31

原帖由 lyj 于 2007-1-24 13:07 发表
bo'是转置,应该表示成bo.'吧?


转置直接表示为bo'就行了

xjzuo 发表于 2007-1-24 14:36

回复

你编程时应该注意的两个问题:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1. bo'(x,y)这种你认为的转置, 应该是计算机和我们都不能理解的;
2. 不应该出现cos(a), B(x)等等之类的貌似正确,却是语法错误的写法.
    要求某一点函数值可用subs(Bx,x,0)的形式来求取.
另:已经强调过了,你的kb没有定义.如果是变量,可以用syms kb.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%针对你的上述代码,可修改如下:
%%%%%%%%%%%%%%%%%%%
syms kb x
i=sqrt(-1);
s=1:4;
structure=exp(-i.^s*kb*x);
Ass=[];
x1=0;
A1=subs(structure,x,x1);
x2=1.5;
A2=subs(structure,x,x2);
Bx=diff(structure,x);%结构波函数对x求导
A3=subs(Bx,x,0);
A4=subs(Bx,x,1.5);
Ass=
%%%%%%%%%%%%%%%%%%%%%%%

happy 发表于 2007-1-24 14:36

原帖由 lyj 于 2007-1-24 13:31 发表
i=sqrt(-1);
s=1:4;
structure=exp(-i.^s*kb*x);
Ass=[];
x=0;
A1=structure(x);
x=1.5;
A2=structure(x);
B(x)=diff(structure,x);%结构波函数对x求导
A3=B(0);
A4=B(1.5);
Ass=

A1是structure当 ...


1. 关于i
如果你前面没有用过变量i,那么这里无需用i=sqrt(-1);这个语句,matlab默认i表示单位虚数
2. 关于变量
B(x),matlab中不能有这样的变量,即不能用括号来定义变量,你可以改为Bx等
3. 关于下标
Matlab中的下标只能是自然数,不能等于或者小于0,也不能是小数,上述代码中的B(0),B(1.5)显然不符合相关规则
4. 综合
从搂主的程序可意看出搂主对matlab的编程问题应该是一无所知,建议找一本入门书籍看看相关的语法问题
页: [1] 2
查看完整版本: 一个求方向导数的问题