1. 编写一个M函数,用于计算两个矩阵的积(两个矩阵作为输入参数,不能使用矩阵乘运算符)。
作者&投稿:斐聂 (若有异议请与网页底部的电邮联系)
第一楼的程序错误,没有提示输入A,B矩阵!
我把程序修改后完全能实现,运行时提示输入A,B矩阵,且能得结果!
程序源码如下:
function C=bicu(A,B)
A=input('A matrix=') ;
B=input('B matrix=');
[m1,n1]=size(A);
[m2,n2]=size(B);
if n1==m2
C=zeros(m1,n2);
for i=1:m1
for j=1:n2
for k=1:n1
d=A(i,k)*B(k,j);
C(i,j)=C(i,j)+d;
end
end
end
else disp(['Matrix A and B could not be multiplied']);
end
保存为bicu.m后即可运行!
希望能对你有帮助!
你可定义你的参数为 符号变量哦。
比如下面的MATLAB程序:
>> syms a b c d;
x=[a b; c d];
y=[d;a];
x*y
ans =
a*b + a*d
a*d + c*d
[M N]=size(A);
[m n]=size(B);
if N~=m
error('前者列数与后者行数不同,无法相乘!');
else
for p=1:M
for q=1:n
for t=1:N
D(p,q,t)=A(p,t)*B(t,q);
end
C(p,q)=sum(D(p,q,:));
end
end
end
MATLAB概论
MATLAB是世界流行的优秀科技应用软件之一。具有功能强大(数值计算、符号计算、图形生成、文本处理及多种专业工具箱)、界面友好,可二次开发等特点。在国内外,已有许多高等院校将其列为本科生、研究生和博士生必须掌握的基本技能。
1起源与发展
自1984年由美国MathWorks公司推向市场以来,先后发布了多个版本,1993年发布4.0版,1995年发布4.2c版,1996年发布5.0版,1997年发布5.1版,1999年发布5.3版,2000年发布6.0版,目前发布的为6.5版。
2基本组成
MATLAB主要由MATLAB主程序、Simulink动态仿真系统和MATLAB工具箱三大部分组成。其中MATLAB主程序包括MATLAB语言、工作环境、句柄图形、数学函数库和应用程序接口五个部分;Simulink是用于动态系统仿真的交互式系统,允许用户在屏幕上绘制框图来模拟系统并能动态地控制该系统;工具箱则是MATLAB的基本语句编写的各种子程序集和函数库,用于解决某一方面的特定问题或实现某一类的新算法,是开放的,可以根据需要扩充。
3通用命令
通用命令是在MATLAB命令窗口中直接键入并执行。常见的如下表所列。
名称 功能说明
clear 清除内存中所有的或指定的变量和函数
cd 显示和改变当前工作目录
clc 擦除MATLAB工作窗口中所有显示的内容
clf 擦除MATLAB工作窗口中的图形
dir 列出当前或指定目录中的文件清单
disp 在运行中显示变量或文字内容
echo 控制运行的文字命令是否显示
hold 控制当前的图形窗口对象是否被刷新
home 擦除命令窗口中的全部内容
pack 收集内存碎片以扩大内存空间
quit 关闭并退出MATLAB
type 显示所指定文件的全部内容
exit 退出MATLAB
4帮助文件
MATLAB为用户提供了非常详尽的帮助文件,最常见的帮助命令是help,直接输入help则列出全部信息,help后加对象则提示对象帮助信息。
MATLAB的基本矩阵运算
1 简单矩阵输入
MATLAB最基本、也是最重要的功能就是进行实数矩阵或者复数矩阵的运算。由于向量可作为矩阵的一行或者一列,标量(一个数)则可以作为只含有一个元素的矩阵,故向量和标量都可以作为特殊矩阵来处理。MATLAB的操作和命令对于矩阵而言,和我们平时使用的形式很相似,但它还有自己的一些规定。
一、键盘输入
对于比较小的简单矩阵,可以使用键盘直接输入,例如:
a=1;b=2;c=3
x=[5 b c;a*b a+c c/b]
x =
5.0000 2.0000 3.0000
2.0000 4.0000 1.5000
矩阵生成不但可以使用纯数字,也可以使用变量。矩阵的元素直接排列在方括号内,每行内的元素使用空格或者逗号分开,行与行之间使用分号隔开。大的矩阵可以分行输入,用回车键代替分号,这和我们平时使用的矩阵形式很相近。例如
a=[1 2 3
4 5 6]
大部分的试验数据使用上面的形式给出的,在处理试验数据中,可以简单的将数据前后加入左右括号,就可以得到矩阵的表示。这种处理可以在脚本文件中进行。
二、矩阵生成
MATLAB提供了很多生成和操作矩阵的函数。下面给出几个创建矩阵的例子。
如果是线性等间距格式生成矩阵,可以使用from:step:to方式。from、step、to分别表示开始值、步长和结束值。例如
a=1:2:10
a =
1 3 5 7 9
还可以使用linspace命令,如:
a=linspace(1,10,5)
a =
1.0000 3.2500 5.5000 7.7500 10.0000
linespace的三个参数表示开始值、结束值和数据个数。数据个数可以省略,缺省值为100。
在画Bode图等应用中,需要使用对数等间隔的数据,可以使用logspace命令生成。Logspace和linspace的参数相同,只是结果不同。
2 矩阵运算
矩阵运算是MATLAB的基础,MATLAB的矩阵运算功能十分强大,并且运算的形式和一般的数学表示十分相似。
一、矩阵的转置
矩阵的转置用符号 ’
a=[1 2 3;4 5 6]
a =
1 2 3
4 5 6
b=a'
b =
1 4
2 5
3 6
如果矩阵a为复数矩阵,则a’为共轭转置。
a=[1 2;4 5], d=a+a*i,c1=d',c2=conj(d),
骆美参麦:[答案] function C=ji(A,B)[M N]=size(A);[m n]=size(B);if =merror('前者列数与后者行数不同,无法相乘!');elsefor p=1:Mfor q=1:nfor t=1:ND(p,q,t)=A(p,t)*B(t,q);endC(p,q)=sum(D(p,q,:));endendend
长清区19236407014: 2.自找一幅图像,用空间滤波方法对其进行平滑和锐化.1. 编写一个M函数,用于计算两个矩阵的积(两个矩阵 - ?
骆美参麦: 频域增强:global I J=imnoise(I,'salt & pepper',0.02);%gei tuxiang tianjia yanjiao zaosheng subplot(121),imshow(J) title('han you zaosheng de yuan tuxiang') J=double(J); f=fft2(J); g=fftshift(f); [M,N]=size(f); n=3;d0=20; n1=floor(M/2);n2=floor(N/2); for i...
长清区19236407014: c语言编程:写一个函数计算两个正整数的最小公倍数,在主函数中用scanf输入m,n两个正整数,调用函数后,打印这两个正整数的最小公倍数?
骆美参麦: #include "stdio.h" int fun(int m,int n) { int a,b,c; a=m; b=n; c=a%b; while(c!=0) {a=b;b=c;c=a%b;} return m*n/b; } void main() { int m,n,i,t; printf("Enter m,n :\n"); scanf("%d,%d",&m,&n); if(m>n) { t=m; m=n; n=t; } printf("The Lowest Common Multiple Of %d and %d is %d\n",m,n,fun(m,n)); }
长清区19236407014: 编写函数:输入两个正整数m,n,求它们的最大公约数和最小公倍数 - ?
骆美参麦: #include<stdio.h>#include<math.h> int fun_y(int,int); int fun_b(int,int); main() { int a,b,gy,gb; printf("输入两个整数:\n"); scanf("%d%d",&a,&b); gy=fun_y(a,b); gb=fun_b(a,b); printf("最大公约数是:%d\n最小公倍数是:%d\n",gy,gb); } ...
长清区19236407014: C语言 编写函数,求两数的乘积. - ?
骆美参麦: #include <stdio.h> //计算两数相乘函数 int multi(int x,int y) { return x*y; //返回两数相乘结果 } int main() { int m,n; printf("输入两个整数: "); scanf("%d%d",&m,&n); printf("%d * %d = %d\n",m,n,multi(m,n)); //调用函数,输出结果 return 0; }
长清区19236407014: 用c语言编写程序,输入两个正整数m和n,计算m!+n! - ?
骆美参麦: #include <stdio.h> void main() {//计算阶乘数的加和float i,m,n,ji=1,sum=0,sum1=0,sum2=0;scanf("%f",&m);scanf("%f",&n);for(i=1;i<=m;i++){ji*=i;sum1+=ji;}for(i=1;i<=n;i++){ji*=i;sum2+=ji;}sum0=sum1+sum2;printf("阶乘的加和结果是:%.2f\n",sum0); }
长清区19236407014: C语言, 写一个函数,将两个正整数n1, n2连成一个新的整数m. - ?
骆美参麦: 两种方法可以做 一个是常规的 根据位数,循环取后一个最高位的值,然后前一个乘十加上去.代码很麻烦 一个是借用字符串.代码如下#include <stdio.h> int main() { int n1,n2,m; char s[100]; scanf("%d%d",&n1,&n2); sprintf(s,"%d%d",n1,n2); sscanf(s,"%d",&m); printf("%d\n",m); return 0; }四句代码搞定.
长清区19236407014: 编写一个函数,计算两个整数值和.进而再编写一个函数,计算任意n(n>=1)个整数的和?
骆美参麦: #include<stdio.h> void main() { int a,b,sum=0; printf("请输入两个整数:");//将两个改成n个就好了 scanf("%d%d",&a,&b); sum=a+b; printf("%d\n",sum); }
长清区19236407014: 则样用C语言编程“定义一个函数,求两个数的最大公约数和最小公倍数” - ?
骆美参麦: #include<stdio.h> int gcd(int m,int n)//最大公约数 { int t; if(m<n) t = n,n = m,m = t; if(n == 0) return m; else return gcd(n,m%n); } int lcm (int m,int n)//最小公倍数 { return m*n/gcd(m,n); } int main() { int m,n; while(scanf("%d %d",&m,&n) == 2) { printf("%d %d\n",gcd(m,n),lcm(m,n)); } }
长清区19236407014: 编写一个函数,计算一个整数m的n次幂,在主函数中输入m和n,并在主函数中输出计算结果 用C语言 - ?
骆美参麦: 代码:#include<stdio.h> int main() { int m,n; int s=1; int power(int a,int b); scanf("%d %d",&m,&n); printf("%d",power(m,n)); } int power(int a,int b) { int t=1; if(b==1) t=a; else t=a*power(a,b-1); return(t); } 扩展资料:运行结果:递归方法代码:#...