声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2295|回复: 18

[编程技巧] 一个求方向导数的问题

[复制链接]
发表于 2007-1-21 17:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
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=[cos(a) sin(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=[cos(a) sin(a)]*[box1;boy1]

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

使用道具 举报

发表于 2007-1-21 17:32 | 显示全部楼层

回复

建议你一次将你的问题用word传上来,便于大家理解你的程序问题所在.
 楼主| 发表于 2007-1-21 17:56 | 显示全部楼层
我的程序很多,很复杂的,现在在一块一块的编,用到好多积分求导转置的问题,要解决一个数学模型求解矩阵系数的问题
发表于 2007-1-21 18:31 | 显示全部楼层

回复

再多也没关系,只要打包传一下. (如果不涉及机密的话)
我倒反而对你的问题感兴趣了:@) .
 楼主| 发表于 2007-1-21 19:10 | 显示全部楼层
好的,那我把模型给你整理一下用word传上去,你帮忙看看:@)
 楼主| 发表于 2007-1-23 22:20 | 显示全部楼层
给出了我的问题还有我编的一些程序,希望楼上感兴趣的大侠帮忙看看,有的程序运行不出来,还请指教,要实现最后的问题,我不会整和,帮忙弄下,谢谢

要解决的问题.doc

158 KB, 下载次数: 9

模型

发表于 2007-1-23 22:35 | 显示全部楼层
方向导数的问题可以参考论坛以下帖子:Matlab如何求方向导数
发表于 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]*[box1;boy1]
%%%%%%%%%%%%%%%%%%%%
 楼主| 发表于 2007-1-24 10:46 | 显示全部楼层
楼上你能帮我看下附件里那些程序吗?能帮我整和一下解出最后结果吗?那里边有的函数M文件还调用别的函数M文件,但是不知道为什么运行不出来
发表于 2007-1-24 11:25 | 显示全部楼层

回复

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

对于你的要求,恐怕别人很难有那么多时间去帮你一一调试,
建议自己动手,有问题再来讨论.
 楼主| 发表于 2007-1-24 13:07 | 显示全部楼层
bo'是转置,应该表示成bo.'吧?
 楼主| 发表于 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;A2;A3;A4]

A1是structure当x=0时得到的矩阵,A2是structure当x=1.5时得到的矩阵,A3是对x求导后取零得到的矩阵,A4是对x求导后取1.5得到的矩阵,怎么运行不通呢?前边三行都能运行出来
发表于 2007-1-24 14:31 | 显示全部楼层
原帖由 lyj 于 2007-1-24 13:07 发表
bo'是转置,应该表示成bo.'吧?



转置直接表示为bo'就行了
发表于 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=[A1;A2;A3;A4]

%%%%%%%%%%%%%%%%%%%%%%%
发表于 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的编程问题应该是一无所知,建议找一本入门书籍看看相关的语法问题
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-24 19:20 , Processed in 0.069120 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表