matlab中需要定义一个函数比如说是f(x,y,z),g(x,y,z)这种关于三个变量的函数,不知道怎么定义,求高手指导
做的时候需要做成网格状,x,y,z是以1为单位变化的我现在知道液面的边界条件,就是通过给我的初始条件,能够求出网格里第一行的21个点,另外知道一个左右的边界条件,再由内部...
做的时候需要做成网格状,x,y,z是以1为单位变化的
我现在知道液面的边界条件,就是通过给我的初始条件,能够求出网格里第一行的21个点,另外知道一个左右的边界条件,再由内部各点的条件知道各点的关系,然后求出各点的φ值,具体的题目,我可以邮件给你的。
function w=φ(x,y,z)
x=meshgrid(1:11);%11个行向量
y=meshgrid(1:21);%21个列向量
z=meshgrid(1:2);%这看成是时刻1,时刻2
t=0.0012%时刻1,时刻2
g=9.8%一个值下面会用到
h=1%一个值下面会用到
A(:,:,1)=zeros(11,21);%1时刻的φ
A(:,:,2)=zeros(11,21);%2时刻的φ
B(:,:,1)=zeros(11,21);%1时刻的u
B(:,:,2)=zeros(11,21);%2时刻的u
for(j=1:21)
A(1,j,2)-A(1,j,1)=B(1,j,1)*t
B(1,j,2)-B(1,j,1)=[A(1,j,2)-A(1,j,2)]*g*t/h%自由液面的条件
A(10,j,2)-A(11,j,2)=0%底部边界条件
end%自由液面的条件
for(i=1:11)
A(i,2,2)-A(i,1,2)=0
A(i,21,2)-A(i,20,2)=0
end%左右边界条件
for(i=1:11)
for(j=1:21)
A(i+1,j,2)-2*A(i,j,2)+A(i-1,j,2)+A(i,j+1,2)-2*A(i,j,2)+A(i,j-1,2)=0
end
end%内部各点的条件
w=A%将A(i,j,k)付值给φ(x,y,z) 展开
我现在知道液面的边界条件,就是通过给我的初始条件,能够求出网格里第一行的21个点,另外知道一个左右的边界条件,再由内部各点的条件知道各点的关系,然后求出各点的φ值,具体的题目,我可以邮件给你的。
function w=φ(x,y,z)
x=meshgrid(1:11);%11个行向量
y=meshgrid(1:21);%21个列向量
z=meshgrid(1:2);%这看成是时刻1,时刻2
t=0.0012%时刻1,时刻2
g=9.8%一个值下面会用到
h=1%一个值下面会用到
A(:,:,1)=zeros(11,21);%1时刻的φ
A(:,:,2)=zeros(11,21);%2时刻的φ
B(:,:,1)=zeros(11,21);%1时刻的u
B(:,:,2)=zeros(11,21);%2时刻的u
for(j=1:21)
A(1,j,2)-A(1,j,1)=B(1,j,1)*t
B(1,j,2)-B(1,j,1)=[A(1,j,2)-A(1,j,2)]*g*t/h%自由液面的条件
A(10,j,2)-A(11,j,2)=0%底部边界条件
end%自由液面的条件
for(i=1:11)
A(i,2,2)-A(i,1,2)=0
A(i,21,2)-A(i,20,2)=0
end%左右边界条件
for(i=1:11)
for(j=1:21)
A(i+1,j,2)-2*A(i,j,2)+A(i-1,j,2)+A(i,j+1,2)-2*A(i,j,2)+A(i,j-1,2)=0
end
end%内部各点的条件
w=A%将A(i,j,k)付值给φ(x,y,z) 展开
4个回答
展开全部
首先确定xyz的范围,比如说xyz都是从1到10,那么
[x,y,z]=meshgrid(1:10);
这时x,y,z都是3维矩阵,因此后面无法进行乘法运算是吧。因此函数没法写。你是这个地方卡住了是吧???
可以这样解决:
x=x(:);y=y(:);z=z(:);这样将xyz变成向量。就可以像平时一样定义函数了。
[x,y,z]=meshgrid(1:10);
这时x,y,z都是3维矩阵,因此后面无法进行乘法运算是吧。因此函数没法写。你是这个地方卡住了是吧???
可以这样解决:
x=x(:);y=y(:);z=z(:);这样将xyz变成向量。就可以像平时一样定义函数了。
更多追问追答
追问
谢谢你的回答,我是想把把f(x,y,z)看坐是数组 A[i,j,k],然后对这个数组在不同的i,j,k 下写出对应的关系并进行迭代,最后解出 A[i,j,k] 中各元素的值,对于这种三维数组怎么定义?
追答
三维数组的定义是这样的:
初始化一个元素全为零的5x5x5的三维数组:
A(:,:,1)=zeros(5,5);A(:,:,2)=zeros(5,5);........一直到A(:,:,5)=zeros(5,5);
如果第三维数较大,你可以用for循环来做。
你的想法我明白,但是这样编程实在太麻烦了。我不知道你的函数的具体形式。但是对于一个能显性表达的一个三元函数,你的这种用3维数组来表达一个函数的形式很难操作啊。用我的方法应该非常方便。我举个例子:
如果函数表达式是这样的w=x+y*z; 那么,新建m函数文件,取名myfun.m
function w = myfun(x,y,z)
% x y z 是输入参数。分别是矩阵形式的。
% 比如如下定义 [x,y,z]=meshgrid(1:10); xyz的范围和采样你可以根据自己的需要自己指定。然后通过参数传递到这个函数来。
x1=x(:);y1=y(:);z1=z(:); %xyz向量化了。x后面还有用,所以没直接改x,而是存成新变量x1.
w = w=x1+y1.*z1; %向量化的xyz可以方便的表达任何函数,如果不向量化,3维矩阵的计算非常受限制。乘法是肯定不可以的。加法我忘了,好像也不可以。。但是向量化之后随便操作。
这样w也是和xyz同样尺寸的向量。但是你需要的是3维矩阵形式的。那么再进行下一步。
w=reshape(w,size(x,1),size(x,2),size(x,3)); %这个命令使w变成和x一样的3维矩阵形式。这就达到你的要求了。
完事了。希望能帮到你。不清楚你的具体要求和目的,要是还有不懂的再问吧。我觉得已经够详细了。
展开全部
function a=f(x,y,z)
a代表函数输出值
a代表函数输出值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先确定xyz的范围,比如说xyz都是从1到10,那
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看不懂问题???? 定义函数用function [输出]=f(x,y,z)就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询