大连理工大学-2015年矩阵上机编程作业

合集下载

大连理工大学c语言上机模拟题1

大连理工大学c语言上机模拟题1

A1.已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用八进制表示的字符常量'\101'是()。

A、字符AB、字符aC、字符eD、非法的常量C2.下列程序段的输出结果为()。

float k=0.8567; printf("%4.1f%%",k*100);A、85.6%B、85.6%%C、85.7%D、.857A3.下面的scanf函数输入数据,使得a=10,b=15,s1='S',s2='s',x1=1.5,x2=-3.75,x3=67.8, 正确的键盘输入方法是( ).(用"[CR]"表示回车,U表示空格)main(){int a,b;float x1,x2,x3;char s1,s2;scanf("%5d%5d%c%c%f%f%*f%f",&a,&b,&s1,&s2,&x1,&x2,&x3);}A、10UUU15Ss1.5U-3.75U+1.5U67.8[CR]B、10UUU15USUs1.5U-3.75U+1.5U67.8[CR]C、10UUU15USUsU1.5U-3.75U+1.5U67.8[CR]D、10UUU15Ss1.5U-3.75U+1.5,67.8[CR]A4. C语言的if语句中,用作判断的表达式为( )。

A、任意表达式B、算术表达式C、逻辑表达式D、关系表达式A5以下程序的输出结果是:( )main(){int m=5;if(m++>5) printf("%d\n",m);else printf("%d\n",m--);}A、6B、5C、7D、4C6以下for循环的执行次数是 for(x=0,y=0;(y=123)&&(x<4);x++);()。

大连理工大学工科数学分析上机作业

大连理工大学工科数学分析上机作业

工科数学分析上机作业说明:以下两道题均是使用Matlab 语言,且在Matlab 7.0中运行通过。

1.(两个重要极限)计算下列函数的函数值并画出图形,观察两个重要极限值。

(1)y=f(x)=; (2)y=f(x)=.解:(1)求解过程如下:>> syms x>> y=limit(sin(x)/x)y =1>> ezplot(sin(x)/x,[-10*pi,10*pi])>> ezplot(sin(x)/x,[-1*pi,1*pi])其图形如下:(2)求解过程如下:>> syms x>> y=(1+x)^(1/x)y =(1+x)^(1/x)>> y=limit((1+x)^(1/x))y =exp(1)>> ezplot((1+x)^(1/x),[-1000,1000]) >> ezplot((1+x)^(1/x),[-10,10]) >> ezplot((1+x)^(1/x),[-1,1])其图像如下:分析如下:(1)当x 取值为[-30,30]时,由该题的第一个图像可以看到,函数值在不断震荡,一会为正数,一会为负数。

而当x取值为[-3,3]时,函数值始终大于0。

当x趋近于0时,由该题的第二个图像可以得到函数值为1。

另外,该结论也可以由夹逼法则证明,结果不变,当x趋近于0时,函数值仍为1。

(2)由该题的三个图像可以知道,该函数在定义域内为单调递减函数。

且由该题的第一和二个图像知道,当x在[0,10]区间内,函数递减趋势非常迅速。

由该题的第三个图像知道,当x趋于0 时,函数值为自然对数的底数 e ,即约为2.71828.3.计算f(x)=,的函数值{f(0.1k);k=1,2,…,30}.计算结果取7位有效数字。

解:计算过程为:>> f1= @(t) exp(-(t).^2/2)f1 =@(t) exp(-(t).^2/2)>> for i=1:30s(i,1)=1/2+1/sqrt(2*pi)*quad(f1,0,i*0.1);end>> fprintf('%9.7g\n',s);0.53982780.57925970.61791140.65542170.69146250.72574690.75803630.78814460.81593990.84134470.86433390.88493030.90319950.91924340.93319290.94520070.95543450.96406970.97128340.97724990.98213560.98609660.98927590.99180250.99379030.99533880.99653290.99744480.99813420.9986501>>分析:本题使用了Matlab 强大的数学计算(微积分计算)功能。

2015级第10次上机题(算机)

2015级第10次上机题(算机)

要求:整理到纸上,下周课代表一起收上来1. 输入10个整数到数组,将该数组中的数倒序仍然存放在该数组中,输出倒序后的该数组。

2. 输入一个4行4列二维整型数组,将该数组中每行元素向下移一行, 最后一行移到第一行, 移后的数组存到另一二维数组b中, 并分行输出b。

3. 建立file1.c、file2.c两个文件的组成的程序,在file1.c中: 实现主函数,定义数组,输入10个整数, 调用file2.c中函数delete_s(int a[10]),删除其中所有负数。

在file2.c中, 实现函数delete_s(int a[10])的定义, 完成a[10]中删除负数功能。

(提示:参看7章课件49页, 只是变为:不小于0的数留下)一个程序分两个文件存放, 整个程序的运行, 方法如下: (以第1题为例)方法1:file1.c和file2.c要建立在一个工作空间中。

具体操作:. 新建file1.c,编译、无错保存,工作空间不关闭. 紧接着新建file2.c ,编译、无错保存. 都没有错,最后点击链接(组建或build)、运行即可注意:主函数中,要对被调用函数声明,才可调用方法2:用include包含法, 即在主函数所在的文件中用include 将另一个文件包含。

例:若file2.c存在d盘根目录下,则包含写为:#include<d:\file2.c>或#include"d:\fille1.c"(注意:该方法file1.c、file2.c不能在一个工作区采用方法2时, 主函数中不需要对被调用函数声明, 可直接调用,因已经包含)方法3: 建一个项目文件, 然后在该项目中, 建立file1.c和file2.c 过程如下举例:1. 建立项目文件fpro:选file—new---projects在左侧:选Win32 Console Application右侧:project name 处填写项目名,如fprolocation 处填写存放位置,如e:则此处自动变为e:\fpro即自动放在e:\fpro目录下填好后:点击OK又出现窗口中,点击Finish又出现窗口,点击OK2. 在该项目中建立文件file1.c,方法和以前建C程序文件操作一样:file-new-files ....。

大连理工大学软件学院java程序设计第二次上机作业

大连理工大学软件学院java程序设计第二次上机作业

程序题:1 图形间的关系可以用图1来表现。

所有的图形中都可以称为Shape 。

由这个类可以派生出二维图形TwoDimensionalShape 和三维图形ThreeDimensionalShape 类。

每个TwoDimensionalShape 类应包括成员函数getArea 以计算二维图形的面积。

每个ThreeDimensionalShape 类包含成员函数getArea 和getVolume ,分别计算三维图形的表面积和体积。

编写一个程序,用一个数组乘放各种图形类对象,并输出对象得相应信息,要能判断每个图形到底属于TwoDimensionalShape 还是属于ThreeDimenionalShape 。

如果某个图形是TwoDimensionalShape 就显示其面积,如果某个图形是ThreeDimenionalShape,则显示其面积和体积。

请完成图中所有的类ShapeCircle Square Triangle TwoDimensionalShape ThreeDimensionalShapeCube Sphere图1 图形类族继承关系图2 利用面向对象思想,描述一个家庭体育锻炼的程序框架(类结构)。

目前家庭成员包括父亲(father )、母亲(mother )、孩子(child )。

父亲的体育锻炼项目为打羽毛球,母亲的体育锻炼项目为跳健美操,孩子的体育锻炼项目为跳绳。

设计时要考虑将来有可能增加新的家庭成员(比如爷爷、奶奶,现在设计中不要出现),但是不可以改变现在的类。

要求: 设计出所有的类,只需要写出类的声明(只列出属性和方法)。

必须有一个家庭类,并且该类有一个sports 方法,当运行家庭类的sports 方法时,各个成员即开始体育锻炼,对该sports 方法写出实现。

3 按照某种格式输出系统时间:自学java 中的时间。

自学Date 类(java.util.Date )和SimpleDateFormat 类,用程序输出“当前时间是XXXX 年XX 月XX 日XX 时XX 分XX 秒(第XX 周,周X )”选择概念练习:(不检查,不上交)1 尝试编译运行下面两个文件会有怎样的结果?(假设在同一路径下)//File P1.javapackage MyPackage;class P1{void method1(){System.out.println("method1 in class P1!");}// File P2.javapublic class P2 extends P1{ // extends表示继承void method2(){System.out.println("method2 in class P2!");}}2 给定下列程序,正确的输出是?(请选择1个选项)(考察equals())class Test{public static void main(String args[]){Integer x = new Integer(5);Long y = new Long(5);Object o = x;System.out.println(x.equals(y)+","+o.equals(x));}}a) false,trueb) false,falsec) true,trued) true,false3 给定下列程序,正确的说法是?(请选择1个选项)1: class A {2: final int q;3: static final int w = 0;4: A(){5: this(w);6: q=1;7: }8: A(int x){9: q=x;10: }11: }a) 编译成功b) 编译失败:第5行,w引用错误c) 编译失败:第6行,q赋值错误d) 编译失败:第5行、第6行均有错误4 给定下列程序,正确的输出是?(请选择1个选项)(考察static关键字)class A {String s = "A.var";void method1(){ System.out.println ("A method");}static void method2(){ System.out.println ("static A method"); }}public class B extends A{String s ="B.var";void method1(){ System.out.println ("B method");}static void method2(){ System.out.println ("static B method"); } public static void main(String[] args){A a = new B();System.out.println(a.s);a.method1();a.method2();}}a) A.varB methodstatic A methodb) A.varB methodstatic B methodc) B.varB.methodstatic A methodd) 编译失败,静态方法method2不能被覆盖5 有错么?class A {int i;public A(int i){this.i=i;}}class B extends A{public B(int j) {i=j;}}public class C {public static void main(String[] args) {A a=new B(7);}}。

大工软院编译上机1词法分析

大工软院编译上机1词法分析

大连理工大学软件学院编译技术课程——词法分析上机实验//注意:需要建立test文档,文档内为输入实验目的:对循环语句和条件判断语句编写词法分析编译程序,只能通过一遍扫描完成。

(用c++实现)实验要求:(1)关键字:for if then else while do所有关键字都是小写。

(2)运算符和分隔符::= + - * / < > <= <> >= ; ( ) # (3)其他标识符(ID)和整型常数(NUM),通过以下正规式定义:ID=letter(letter | digit)*NUM=digit digit*(4)空格由空白、制表符和换行符组成。

空格一般用来分隔ID、NUM、运算符、分隔符和关键字,词法分析阶段通常被忽略。

各种词法单元对应的词法记号如下:词法分析程序的功能输入:源程序输出:二元组(词法记号,属性值/其在符号表中的位置)构成的序列。

例如:对源程序x:=5; if (x>0) then x:=2*x+1/3; else x:=2/x; #经词法分析后输出如下序列:(10,’x’)(18, :=) (11,5) (26, ;) (2, if ) (27,( )……1.几点说明:(1)关键字表的初值。

关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符,查关键字表。

如能查到匹配的单词,则该单词的关键字,否则为一般标识符。

关键表为一个字符串数组,其描述如下:char *keyword[6]={”for”, ”if”, ”then” ,”else”,”while”, ”do” };(2)程序中需要用到的主要变量为token , id和num.1)id用来存放构成词法单元的字符串;2)num用来存放整数(可以扩展到浮点数和科学计数法表示);3)token用来存放词法单元的词法记号。

可以参考下面的代码:do{lexical(); //将词法单元对应的记号保存到token中,属性值保存到num或者id 中switch(token) {case 11: printf ("(token, %d\n) ", num); break;case -1: printf("error!\n");break;default: printf("(%d,%s)\n", token, id);}}while (token!=0);#include<iostream>#include<string>#include<fstream>#include<queue>#include<cstdlib>using namespace std;string keyword[6]={"for","if","then","else","while","do"}; bool isLETTER(char temp){if(temp>='a' && temp<='z')return true;elsereturn false;}bool isDIGIT(char temp){if(temp>='0' && temp<='9')return true;elsereturn false;}bool isID(string temp){bool flag=true;if(!isLETTER(temp[0]))flag=false;for(int i=1;i<temp.length() && flag;i++){if(!(isLETTER(temp[i]) || isDIGIT(temp[i])))flag=false;}return flag;}bool isNUM(string temp){bool flag=true;for(int i=0;i<temp.length() && flag;i++){if(!(temp[i]>='0' && temp[i]<='9'))flag=false;}return flag;}void getkey(string temp,int & key) {if(temp=="for") key=1;else if(temp=="if") key=2;else if(temp=="then") key=3;else if(temp=="else") key=4;else if(temp=="while") key=5;else if(temp=="do") key=6;else if(isID(temp)) key=10;else if(isNUM(temp)) key=11;else if(temp=="+") key=13;else if(temp=="-") key=14;else if(temp=="*") key=15;else if(temp=="/") key=16;else if(temp==":") key=17;else if(temp==":=") key=18;else if(temp=="<") key=20;else if(temp=="<>") key=21;else if(temp=="<=") key=22;else if(temp==">") key=23;else if(temp==">=") key=24;else if(temp=="=") key=25;else if(temp==";") key=26;else if(temp=="(") key=27;else if(temp==")") key=28;else if(temp=="#") key=0;else key=-1;}int main(){string temp;char a;int key;queue<string> aqueue;char *array=new char[20];bool flag=true;ifstream file;file.open("test.txt");if(!file){cout<<"can't open 'test.txt' "<<endl;exit(1);}a=file.get();while(!file.eof() ){while(a==' '){a=file.get();}flag=true;int i=0;array[i++]=a;while(isDIGIT(a)){a=file.get();if(isDIGIT(a))array[i++]=a;elseflag=false;}if(isLETTER(a) && flag){while(isLETTER(a)||isDIGIT(a)){a=file.get();if(isLETTER(a)||isDIGIT(a))array[i++]=a;elseflag=false;}}if(flag){switch(a){case ':' : a=file.get();if(a=='='){array[i++]=a;a=file.get();}break;case '<' : a=file.get();if(a=='>' || a=='='){array[i++]=a;a=file.get();}break;case '>' : a=file.get();if(a=='='){array[i++]=a;a=file.get();}break;default : a=file.get(); break;}}string t(array,i);aqueue.push(t);}while(!aqueue.empty()){temp=aqueue.front();aqueue.pop();getkey(temp,key);switch(key){case -1: cout<<"error!"<<endl; break;//case 0: cout<<"("<<key<<","<<temp<<")"<<endl; break;default: cout<<"("<<key<<","<<temp<<")"<<endl; break;}}return 0;}。

2015年线性代数2-矩阵

2015年线性代数2-矩阵

线性代数85二、矩阵86引例某地区有甲、乙、丙3个企业,生产A、B、C、D 4 种产品,每种产品的单价与单位利润如下

⎟⎟⎟⎟⎟⎠⎞⎜⎜⎜⎜⎜⎝⎛

424132312221

1211

bbbbbb

bb

单价单位利润

42322212

41312111

DCB

A

bbbb

bbbb

1 矩阵的概念

87⎟⎟⎟⎟⎟⎠⎞⎜⎜⎜⎜⎜⎝⎛⇒mnmmnnaaaaaaaaa"""""""21222211121111112211211222221122nnnmmmnnnmaxaxaxbaxaxaxbaxaxaxb+++=⎧⎪+++=⎪⎨⎪⎪+++=⎩""""""""""""""11121121222212,nnmmmnmaaabaaabaaab⎛⎞⎜⎟⎜⎟⎜⎟⎜⎟⎝⎠""""""""系数矩阵增广矩阵88如⎟⎟⎟⎟⎟

⎠⎞⎜⎜⎜⎜⎜⎝⎛

=

mnmmnnaaaaaaaaaA"""""""2122221

11211

(1)定义()nmija×=

aij—矩阵的元素

nm×个数

njmiaij,,2,1;,,2,1,""==

排成m行n 列的长方形数表, 用圆括号或方括号括起来, 称为矩阵. 记为A, B, C, "

¾

89¾定义同类型矩阵与两个矩阵的相等()()tsijnmijbBaA××==,设若m =s , n = t ,njmibaijij,,2,1;,,2,1,""===则称A,B相等,记为A= B则称A,B为同类型矩阵对于两个同类型矩阵A, B, 若还有90(2)几种特殊类型的矩阵:󰂉行(列)矩阵

只有一行(列)的矩阵

()()nnaaaaaa,,,21

21

"

"1

2

n

bb

b

⎛⎞⎜⎟⎜⎟⎜⎟⎜⎟⎝⎠

#

15线性代数91󰂉零矩阵nmnmO××⎟⎟⎟⎟⎟⎠⎞⎜⎜⎜⎜⎜⎝⎛=000000000"""""""󰂉方阵nnnnnnnnaaaaaaaaa×⎟⎟⎟⎟⎟⎠⎞⎜⎜⎜⎜⎜⎝⎛"""""""212222111211方阵的主对角线主对角元方阵的行列式nijaA=detdet()ijnnAa×== 092特殊类型的方阵:¾对角矩阵

数据结构作业答案(大连理工大学)

作业1. 线性表编程作业:1.将顺序表逆置,要求用最少的附加空间。

参考答案#include <>#include <>#include <>#define LIST_INIT_SIZE 100#define LISTINCREMENT 10#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef struct{ ElemType *elem;int length;int listsize;}SqList;立单链表 ");printf("2.取元素值 ");printf("3.查找 \n");printf("4.插入 ");printf("5.删除 ");printf("6.显示\n");printf("7.删除大于mink且小于maxk的元素值 ");printf("8.就地升序排序\n");printf("9.就地逆置 ");printf("a.有序表插入 ");printf("q.退出\n");printf("\n请选择操作:");fflush(stdin);scanf("%c",&choice);switch(choice){case '1': printf("请输入单链表中结点个数:");scanf("%d",&n);Create_L2(L,n);break;case '2': printf("请输入元素位序:");scanf("%d",&i);GetElem_L(L,i,e);printf("元素值为:%d\n",e);break;case '3': printf("请输入要查找的元素:");scanf("%d",&e);if(dlbcz(L,e))printf("查找成功!");elseprintf("查找失败。

大连理工优化方法大作业MATLAB编程

fun ctio n [x,dk,k]=fjqx(x,s) flag=0;a=0;b=0;k=0;d=1;while (flag==0)[p,q]=getpq(x,d,s);if (P<0)b=d;d=(d+a)/2;endif(p>=0) &&( q>=0)dk=d;x=x+d*s;flag=1;endk=k+1;if (p>=0)&&(q<0)a=d;d=min{2*d,(d+b)/2};endend%定义求函数值的函数 fun ,当输入为 x0= (x1 , x2 )时,输出为 f function f=fun(x)f=(x(2)-x(1)A2)A2+(1-x(1)F2;function gf=gfun(x)gf=[-4*x(1)*(x (2) -x(1)A2)+2*(x(1)-1),2*(x(2)-x(1)A2)];function [p,q]=getpq(x,d,s)p=fun(x)-fun(x+d*s)+0.20*d*gfun(x)*s';q=gfun(x+d*s)*s'-0.60*gfun(x)*s';结果:x=[0,1];s=[-1,1];[x,dk,k]=fjqx(x,s)x =-0.0000 1.0000dk =1.1102e-016k =54取初始= (0.0. 0,0)r^'l用兵柜梯皮法求解下面无约東优化问题:min f (x) = x孑—2x^X2 十2x孑 + x孑H-爲—X2天3 十 2xj + 3|X2 —*3,其中步长g的选取可利用习題1戎精确一维披索.注:通过比习题验证共範梯度法求辉门无二次西数极小点至多需要“次迭代.fun ctio n f= fun( X )%所求问题目标函数f=X(1)A2-2*X(1)*X (2)+2*X(2)A2+X(3)A2+ X(4) A2-X( 2)*X(3)+2*X(1)+3*X(2)-X(3);end function g= gfun( X )%所求问题目标函数梯度g=[2*X(1)-2*X(2)+2,-2*X(1)+4*X(2)-X(3)+3,2*X (3) -X (2)-1,2*X(4)];end function [ x,val,k ] = frcg( fun,gfun,xO )%功能:用FR共轭梯度法求无约束问题最小值%输入:x0是初始点,fun和gfun分别是目标函数和梯度%输出:x、val分别是最优点和最优值,k是迭代次数maxk=5000; %最大迭代次数rho=0.5;sigma=0.4;k=0;eps=10e-6;n=length(x0);while (k<maxk)g=feval(gfun,x0); % 计算梯度 itern=k-(n+1)*floor(k/(n+1));itern=itern+1;%计算搜索方向if (itern==1)d=-g;elsebeta=(g*g')/(g0*g0');d=-g+beta*d0;gd=g'*d;if (gd>=0.0)d=-g;endendif (norm(g)<eps)break ;endm=0;mk=0;while (m<20)if(feval(fu n,xO+rhoAm*d)<feval(fu n,xO)+sigma*rhoAm*g'*d) mk=m; break ;endm=m+1;endx0=x0+rho A mk*d;val=feval(fun,x0);g0=g;d0=d;k=k+1;endx=x0;val=feval(fun,x0);end结果:>> x0=[0,0,0,0];>> [ x,val,k ] = frcg( 'fun','gfun',x0 ) x =-4.0000 -3.0000 -1.0000 0val =-8.0000k =或者function [x,f,k]=second(x)k=0;dk=dfun(x);g0=gfun(x);s=-g0;x=x+dk*s;g1=gfun(x);while (norm(g1)>=0.02)if (k==3)k=0;g0=gfun(x);s=-g0;x=x+dk*s;g1=gfun(x);else if (k<3)u=(( norm(g1))A2)/( norm(gO)A2); s=-g1+u*s;k=k+1;g0=g1;dk=dfun(x);x=x+dk*s;g1=gfun(x);endendf=fun(x);endfunction f=fun(x)f=x(1F2-2*x(1)*x (2)+2*x (2)A2+x(3)A2+x(4)A2-x (2) *x (3)+2*x(1)+3*x(2)-x(3); function gf=gfun(x)gf=[2*x(1)-2*x(2)+2,-2*x(1)+4*x(2)-x(3)+3,2*x(3)-x(2)-1,2*x(4)];function [p,q]=con(x,d)ss=-gfun(x);p=fun(x)-fun(x+d*ss)+0.2*d*gfun(x)*(ss)';q=gfun(x+d*ss)*(ss)'-0.6*gfun(x)*(ss)';function dk=dfun(x)flag=0;a=0;d=1;while (flag==0)[p,q]=con(x,d);if (p<0)b=d;d=(d+a)/2;endif (p>=0)&&(q>=0)dk=d;flag=1;endif (p>=0)&&(q<0)a=d;d=min{2*d,(d+b)/2};endEnd结果: x=[0,0,0,0];>> [x,f,k]=second(x)x =-4.0147 -3.0132-1.0090 0 f = -7.9999k = 1取初始点3 = (0」)二考虑下面无约東优化问题:min f(x)二冷 + 2x2 + exp(xf + 天孑),其中歩长Qk的选取可別用习题1或精确一维搜索•搜索方向为一HNW ♦取垃=b•取皿=R2f防)]"9耳丈啟为BFG5公式亠通过此习题体会上述三种算法的收敛速度.fun ctio n [f,x,k]=third_1(x) k=0;g=gfu n(x);while (norm(g)>=0.001) s=-g;dk=dfu n( x,s);x=x+dk*s;k=k+1;g=gfu n(x);f=fun( x);endfun ctio n f=fun(x)f=x(1)+2*x(2)A2+exp(x(1)A2+x(2)A2);fun ctio n gf=gfu n(x)gf=[1+2*x(1)*exp(x(1)A2+x(2)A2),4*x(2)+2*x(2)*(x(1)A2+x(2)A2)]; function[j_1,j_2]=con(x,d,s)j_1=fun(x)-fun(x+d*s)+0.1*d*gfun(x)*(s)'; j_2=gfun(x+d*s)*(s)'-0.5*gfun(x)*(s)'; function dk=dfun(x,s) % 获取步长 flag=0;a=0;d=1;while (flag==0)[p,q]=con(x,d,s);if (p<0)b=d;d=(d+a)/2;endif (p>=0)&&(q>=0)dk=d;flag=1;endif (p>=0)&&(q<0)a=d;d=min{2*d,(d+b)/2}; end结果:x=[0,1];[f,x,k]=third_1(x)f =0.7729x = -0.4196 0.0001k =8(1 ) 程序:function [f,x,k]=third_2(x)k=0;H=inv(ggfun(x));g=gfun(x);while (norm(g)>=0.001)s=(-H*g')';dk=dfun(x,s);x=x+dk*s;k=k+1;g=gfun(x);f=fun(x);endfunction f=fun(x)f=x(1)+2*x(2)A2+exp(x(1F2+x(2)A2);function gf=gfun(x) gf=[1+2*x(1)*exp(x(1F2+x(2)A2),4*x(2)+2*x(2)*(x(1F2+x(2)A2)]; function ggf=ggfun(x)ggf=[(4*x(1)A2+2)*exp(x(1)A2+x (2) A2),4*x(1)*x (2) *exp(x(1)A2+x(2)A2);4*x(1)*x(2)*exp(x(1)A2+x(2)A2),4+(4*x(2)A2+2)*exp(x(1)A2+x(2)A2)];function [j_1,j_2]=con(x,d,s)j_1=fun(x)-fun(x+d*s)+0.1*d*gfun(x)*(s)';j_2=gfun(x+d*s)*(s)'-0.5*gfun(x)*(s)'; function dk=dfun(x,s) % 步长获取flag=0;a=0;d=1;b=10000;while (flag==0)[p,q]=con(x,d,s);if (p<0)b=d;d=(d+a)/2;endif(p>=0)&&(q>=0)dk=d;flag=1;endif (p>=0)&&(q<0)a=d;if 2*d>=(d+b)/2d=(d+b)/2;endendEnd结果:x=[0,1];[f,x,k]=third_2(x)f =0.7729x = -0.4193 0.0001k =8(2) 程序:function [f,x,k]=third_3(x) k=0;X=cell(2);g=cell(2);X{1}=x;H=eye(2);g{1}=gfun(X{1});s=(-H*g{1}')';dk=dfun(X{1},s);X{2}=X{1}+dk*s;g{2}=gfun(X{2});while (norm(g{2})>=0.001)dg=g{2}-g{1};v=dx/(dx*dg')-(H*dg')'/(dg*H*dg');h1=H*dg'*dg*H/(dg*H*dg');h2=dx'*dx/(dx*dx');h3=dg*H*dg'*v'*v;H=H-h1+h2+h3;k=k+1;X{1}=X{2};g{1}=gfun(X{1});s=(-H*g{1}')';dk=dfun(X{1},s);X{2}=X{1}+dk*s;g{2}=gfun(X{2});norm(g{2});f=fun(x);x=X{2};endfunction f=fun(x)f=x(1)+2*x(2)A2+exp(x(1F2+x(2)A2);function gf=gfun(x)gf=[1+2*x(1)*exp(x(1)A2+x(2)A2),4*x(2)+2*x(2)*(x(1)A2+x(2)A2)];function ggf=ggfun(x)ggf=[(4*x(1)A2+2)*exp(x(1)A2+x(2)A2),4*x(1)*x(2)*exp(x(1)A2+x(2)A2);4*x(1)*x(2)* exp(x(1)A2+x(2)A2),4+(4*x(2)A2+2)*exp(x(1)A2+x(2)A2);function [p,q]=con(x,d,s)p=fun(x)-fun(x+d*s)+0.1*d*gfun(x)*(s)';q=gfun(x+d*s)*(s)'-0.5*gfun(x)*(s)';function dk=dfun(x,s)flag=0;a=0;d=1;b=10000;while (flag==0)[p,q]=con(x,d,s);if (p<0)b=d;d=(d+a)/2;if (p>=0)&&(q>=0)dk=d;flag=1;endif (p>=0)&&(q<0)a=d;if 2*d>=(d+b)/2d=(d+b)/2;else d=2*d;endendend结果:x=[0,1];[f,x,k]=third_3(x)f =0.7729x = -0.41950.0000 k=6*U 用有效集法求解下面勺勺二次规划问题:(XI 一 I)2 + (x 2 一 2.5)2 X1 - 2X2 + 2 > 0-Xi — 2>(2 + 6 > 0-Xi + 2X2 + 2 > 0xi,x 2 > 0function callqpactH=[2 0; 0 2];c=[-2 -5]';Ae=[ ]; be=[];Ai=[1 -2; -1 -2; -1 2;1 0;0 1];bi=[-2 -6 -2 0 0]';x0=[0 0]';[x,lambda,exitflag,output]=qpact(H,c,Ae,be,Ai,bi,xO)fun ctio n [x,lamk,exitflag,output]=qpact(H,c,Ae,be,Ai,bi,x0) epsilo n=1.0e-9; err=1.0e-6;k=0; x=x0; n=len gth(x); kmax=1.0e3;n e=le ngth(be); ni=le ngth(bi); lamk=zeros( ne+n i,1); in dex=ones(n i,1);for (i=1:ni)if(Ai(i,:)*x>bi(i)+epsil on), i ndex(i)=0; end while (k<=kmax)mmSi.Aee=[];if (ne>0), Aee=Ae; endfor (j=1:ni)if (index(j)>0), Aee=[Aee; Ai(j,:)]; end endgk=H*x+c;[m1,n1] = size(Aee);[dk,lamk]=qsubp(H,gk,Aee,zeros(m1,1)); if (norm(dk)<=err)y=0.0;if (length(lamk)>ne)[y,jk]=min(lamk(ne+1:length(lamk))); endif (y>=0)exitflag=0;elseexitflag=1;for (i=1:ni)if (index(i)&(ne+sum(index(1:i)))==jk) index(i)=0; break ;endendk=k+1;elseexitflag=1;alpha=1.0; tm=1.0;for (i=1:ni)if ((index(i)==0)&(Ai(i,:)*dk<0))tm1=(bi(i)-Ai(i,:)*x)/(Ai(i,:)*dk);if (tm1<tm)tm=tm1; ti=i;endendendalpha=min(alpha,tm);x=x+alpha*dk;if (tm<1), index(ti)=1; endendif (exitflag==0), break ; endk=k+1;endoutput.fval=0.5*x'*H*x+c'*x;output.iter=k;function [x,lambda]=qsubp(H,c,Ae,be) ginvH=pinv(H); [m,n]=size(Ae);if (m>0)rb=Ae*ginvH*c + be;lambda=pinv(Ae*ginvH*Ae')*rb; x=ginvH*(Ae'*lambda-c);elsex=-ginvH*c;lambda=0;end结果>>callqpactx =1.40001.7000lambda =0.8000exitflag =output =fval: -6.4500iter: 7function [x,mu,lambda,output]=multphr(fu n, hf,gf,dfu n, dhf,dgf,xO)%功能:用乘子法解一般约束问题:min f(x), s.t. h(x)=0, g(x).=0%输入:x0是初始点,fun, dfun分别是目标函数及其梯度;% hf, dhf分别是等式约束(向量)函数及其 Jacobi矩阵的转置;% gf, dgf分别是不等式约束(向量)函数及其 Jacobi矩阵的转置;%输出:x是近似最优点,mu, lambda分别是相应于等式约束和不等式约束的乘子向量% output是结构变量,输出近似极小值f,迭代次数,内迭代次数等maxk=500;c=2.0;eta=2.0;theta=0.8;k=0;i nk=0;epsilo n=0.00001;x=xO;he=feval(hf,x);gi=feval(gf,x);n=len gth(x);l=le ngth(he);m=le ngth(gi);mu=zeros(l,1);lambda=zeros(m,1);btak=10;btaold=10;while (btak>epsilon&&k<maxk)%调用BFGS算法程序求解无约束子问题[x,ival,ik]=bfgs( 'mpsi' ,'dmpsi' ,x0,fun,hf,gf,dfun,dhf,dgf,mu,lambda,c);ink=ink+ik;he=feval(hf,x);gi=feval(gf,x);btak=0;for i=1:lbtak=btak+he(y2;end% 更新乘子向量for i=1:mtemp=min(gi(i),lambda(i)/c);btak=btak+temp A2;endbtak=sqrt(btak);if btak>epsilonif k>=2&&btak>theta*btaoldc=eta*c;endfor i=1:lmu(i)=mu(i)-c*he(i);endlambda(i)=max(0,lambda(i)-c*gi(i));endk=k+1;btaold=btak;x0=x;endendf=feval(fun,x);output.fval=f;output.iter=k;%增广拉格朗日函数function psi=mpsi(x,fun,hf,gf,dfun,dhf,dgf,mu,lambda,c) f=feval(fun,x);he=feval(hf,x);gi=feval(gf,x);l=length(he);m=length(gi);psi=f;s1=0;for i=1:lpsi=psi-he(i)*mu(i);s仁 s1+he(y2;psi=psi+0.5*c*s1;s2=0;for i=1:ms3=max(0,lambda(i)-c*gi(i));s2=s2+s3A2-lambda(i)A2;endpsi=psi+s2/(2*c);% 不等式约束函数文件 g1.mfunction gi=g1(x)gi=10*x(1)-x(1)A2+10*x(2)-x(2)A2-34;% 目标函数的梯度文件df1.mfunction g=df1(x)g=[4, -2*x(2)]';% 等式约束(向量)函数的Jacobi 矩阵(转置)文件 dh1.m function dhe=dh1(x)dhe=[-2*x(1), -2*x(2)]'% 不等式约束(向量)函数的Jacobi 矩阵(转置)文件 dg1.m function dgi=dg1(x)dgi=[10-2*x(1), 10-2*x(2)]';function [x,val,k]=bfgs(fun,gfun,x0,varargin) maxk=500; rho=0.55;sigma=0.4;epsilon=0.00001;k=0;n=length(x0);Bk=eye(n);while (k<maxk)gk=feval(gfun,x0,varargin{:});if (norm(gk)<epsilon)break ;enddk=-Bk\gk;m=0;mk=0;while (m<20)n ewf=feval(fu n, x0+rho A m*dk,vararg in {:});oldf=feval(fun,x0,varargin{:});if(newf<oldf+sigma*rhoAm*gk'*dk) mk=m;break ;endm=m+1;endx=x0+rhoAmk*dk;sk=x-x0;yk=feval(gfun,x,varargin{:})-gk;if (yk'*sk>0)Bk=Bk-(Bk*sk*sk'*Bk)/(sk'*Bk*sk)+(yk*yk')/(yk'*sk);endk=k+1;x0=x;endval=feval(fun,x0,varargin{:});结果x=[2 2]';[x,mu,lambda,output]=multphr( 'fun' ,'hf' ,'gf1' ,'df' ,'dh' ,'dg' ,x0) x =1.00134.8987mu =0.7701lambda =0.9434output =fval: -31.9923iter: 4利用序列二次规划方法求解习题5中的约束优化问题:min 4xi 一好一 12s.t. 25 - x? —x孑=Q10x一召 + 10旳-xj - 34 > 0 X1,X2 > 0tf=[3,1,1];A=[2,1,1;1,-1,-1];b=[2;-1];lb=[0,0,0]; x=li nprog(f,A,b,zeros(3),[0,0,0]',lb)结果:Optimization terminated.0.00000.50000.5000。

大连理工大学线代与几何A卷答案(2015.1)

⼤连理⼯⼤学线代与⼏何A卷答案(2015.1)姓名:__________⼤连理⼯⼤学学号:__________课程名称:线性代数与解析⼏何试卷: A 考试形式:闭卷院系:__________ 授课院(系):数学科学学院考试⽇期: 2015年1⽉16⽇试卷共 6 页 _____ 级_____ 班装得分⼀、(每⼩题3分,共30分)填空题1. 设112120200-=??A ,则612152224T =-??-A A2. 设12,αα是2元列向量,[][]1212122,,,,6αααααα=+-==A B A ,则2=-B3. 设A 为三阶⽅阵,2=A ,则1(2)14-*=A A OA订 4. 设向量组123,,a a a 线性⽆关,向量组1122233132,,k =+=+=+b a a b a a b a a 线性相关,则数2k =-5. 点(2,1,3)-到平⾯226x y z -+=的距离为 46. 已知矩阵1222121m k k =??A 为正交矩阵,则1,2.3m k =±=-线 7. 已知由向量组()()()1231,3,1,1,2,0,1,1,1,,0,2TTTk ααα=-=-=-所⽣成的向量空间的维数为2,则3k =8. 设()11223333,0,(2)2,1,ija r a a a ?==+=++=A A A E 则5120+=A E9. 设1500000000-=??P AP ,110101022=??P ,则10100=??Ax 的通解为12102012220k k++10. 设,αβ为三维列向量,,αβ线性⽆关,则TTααββ+的伴随矩阵的秩为 1得分⼆、(8分)计算⾏列式1234123412341234123412341234022222202200220202022022a a a a a a aa a a a a a a a a a a a a a a aaa a aa+++=-+-+-12342200220202002a a a a -=---12342340200200200002a a a a a a a +++=-123416()a a a a =-+++得分三、(10分)当k 满⾜什么条件时,⽅程组1231231231203x x x x kx x kx x x ++=??++=??+-=?有唯⼀解;⽆解;有⽆穷多解?在有⽆穷多解时,求出其通解.解:[]11111111,12001111130113k k k k k k =??→-------A b 11110111002k k k ??→--?--当0k ≠且1k ≠时,有唯⼀解。

董波老师,大连理工大学,矩阵数值分析课件,第二章

作业:
P85 3、6、8、9、12、15、17、 19、20(2)
第2章 矩阵变换和计算
2.1 矩阵的三角分解及其应用 2.2 特殊矩阵的特征系统 2.3 矩阵的Jordan分解 2.4 矩阵的奇异值分解
2.1 矩阵的三角分解及其应用
2.1.1 Gauss消去法与矩阵的LU分解 2.1.2 Gauss列主元消去法与带列主元的LU分解 2.1.3 对称矩阵的Cholesky分解 2.1.4 三对角矩阵的三角分解
(0) 2 (0) 3 (0) 4
第一步,消去 r
( 0) 2
、r
(0) 3
和r
( 0) 4
中的 x1 , 即用
4 (0) 8 (0) ( 0) 6 (0) ( 0) r r 1 r1 r3 和 r1 r4( 0) 得 2 、 2 2 2
四位数学家之一”(阿基米德、牛顿、高斯和欧拉)。
高斯的研究领域,遍及纯粹数学和应用数学的各个领域,并且开辟了许多新的数学 领域。人们评价到:若把18世纪的数学家想象为一系列的高山峻岭,那么最后一个令人 肃然起敬的巅峰就是高斯;如果把19世纪的数学家想象为一条条江河,那么其源头就是 高斯。
从方程组角度考虑Gauss消去法
2 0 0 0
1 1 0 1 1 1 3 5 5 4 6 8
1 0 1 1 2 2 2 4


L2 L1 A
2 1 0 1 0 0 0 0
L3 L2 L1 A
1 1 1 1 1
1) ai(2 第i行 第2行 (1) , i 3,, n a22 a11 a12 a13 a1n b1 (1) (1) 0 a a 22 23 (1) (1) a2 n b2 0 ( 2) 0 a 33 (1) (1) ann bn ( 2) 0 0 a n3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cout<<endl; } } }
} //Ax=b 的解答,A 为上三角矩阵 void SolveOne(double a[9][10],int m,int n){
int j=n-2; double answer[9]; for (int s=m-1;s>=0;s--){
answer[j]=a[s][n-1]/a[s][j]; for(int i=0;i<=s-1;i++){
} } }
} // 发现绝对值最大的元素所在一行和当前的一行做交换 void change(double a[9][10],int m,int n,int nowi,int nowj){
int record=nowi;//记录该和哪一行做交换 bool flag=true; //标志是否需要做交换 double max=a[nowi][nowj]; for(int i=nowi+1;i<m-1;i++){
}
//Gauss 消元解法 //先转化为上三角矩阵 void Gauss(double a[9][10],int m,int n){
double r[9]; //r 为每次的倍数 int k=0; for (int nowi=0,nowj=0;nowi<m-1 && nowj<n-1;nowi++,nowj++){
1. 设
, 其精确值为
.
(1) 编制按从大到小的顺序
, 计算 的通
用程序 (2) 编制按从小到大的顺序
, 计算
的通用程序
(3) 按两种顺序分别计算
并指出有效位数(编制程序时用单精度)
(4) 通过本上机题,你明白了什么
答案:通过分析我们发现利用编制从大到小得到的精度较高,一般先加小数再加大数,
精度会发生缺失。
其代码如下所示: #include <iostream.h> #include<iomanip.h> void main(){ float a[9][9]={ {31,-13,0,0,0,-10,0,0,0}, {-13,35,-9,0,-11,0,0,0,0}, {0,-9,31,-10,0,0,0,0,0}, {0,0,-10,79,-30,0,0,0,-9}, {0,0,0,-30,57,-7,0,-5,0}, {0,0,0,0,-7,47,-30,0,0}, {0,0,0,0,0,-30,41,0,0}, {0,0,0,0,-5,0,0,27,-2}, {0,0,0,-9,0,0,0,-2,29} }; float L[9][9]; LU(a,L,9,9); //LU 分解 cout<<"LU 分解的 L 矩阵为"<<endl; display(L,9,9); cout<<"LU 分解的 U 矩阵为"<<endl; display(a,9,9); cout<<endl; } //定义矩阵相乘 void XMatirx(float LL[9][9],float a[9][9],int m,int n){ float c[9][9]; for (int i=0;i<m;i++){ for(int j=0;j<n;j++){ float sum=0; for(int s=0;s<n;s++){
//输出二维数组元素,这个函数是用来显示矩阵,用来调试 void display(double a[9][10],int r_size1,int r_size2) {
for(int i=0; i<r_size1; i++){ for(int j=0; j<r_size2; j++) {
cout<<setprecision(8)<<setw(12)<<a[i][j]<<""; if(j+1==r_size2) {
//与 Guass 不同的时,每次要检查是否需要交换行 change(a,9,10,nowi,nowj); // 计算要乘的倍数 for(int s=nowi;s<m;s++){
r[s]=a[s+1][nowj]/a[nowi][nowj]; } // 每次根据每行的倍数将所有数处理一遍,变成 (1,0,0,0)T for (int i=nowi;i<m-1;i++){
} void main (){
cout<<"S(100):"<<endl; nFromMintoMax(100); //调用第一问的函数 nFromMaxtoMin(100); //调用第二问的函数 cout<<"S(10000):"<<endl; nFromMintoMax(10000); nFromMaxtoMin(10000); cout<<"S(1000000):"<<endl; nFromMintoMax(1000000); nFromMaxtoMin(1000000); }
display(a,9,10); //显示矩阵 SolveOne(a,9,10); //求解 Ax=b,A 为上三角矩阵 //列主元消元 double b[9][10]={ {31,-13,0,0,0,-10,0,0,0,-15}, {-13,35,-9,0,-11,0,0,0,0,-27}, {0,-9,31,-10,0,0,0,0,0,-23}, {0,0,-10,79,-30,0,0,0,-9,0}, {0,0,0,-30,57,-7,0,-5,0,-20}, {0,0,0,0,-7,47,-30,0,0,12}, {0,0,0,0,0,-30,41,0,0,-7}, {0,0,0,0,-5,0,0,27,-2,7}, {0,0,0,-9,0,0,0,-2,29,10} }; Lie(b,9,10); //列主元消元 cout<<"列主元消元的上三角矩阵为"<<endl; display(b,9,10); //显示 SolveOne(b,9,10); //求解 Ax=b, A 为上三角矩阵 }
}
//输出二维数组元素,这个函数是用来显示矩阵,用来调试 void display(float a[9][9],int r_size1,int r_size2) {
sum=sum+LL[i][s]*a[s][j]; if(i==0 && j==0 && s==0){ // cout<<LL[i][s]<<" "<<a[0][0]<<endl; // cout<<LL[i][s]*a[s][j]<<endl; }
} c[i][j]=sum; } } //写回到 B 数组中,即为最终的 U for (int i1=0;i1<m;i1++){ for(int j=0;j<n;j++){ a[i1][j]=c[i1][j]; } }
if(max<fabs(a[i][nowj])){ max=a[i][nowj]; record=i; flag=false;
} }
//行与行之间交换 if(flag==false){
for(int j=nowj;j<n;j++){ dou[record][j]; a[record][j]=s;
} } }
//列主元消元解法,转化为上三角矩阵 void Lie(double a[9][10],int m,int n){
double r[9]; //r 为每次的倍数 int k=0; for (int nowi=0,nowj=0;nowi<m-1 && nowj<n-1;nowi++,nowj++){
"<<sum<<endl;
void nFromMaxtoMin(float n){ float sum; sum=0.0; for(float i=n;i<1;i--){ sum=sum+(float)1.0/(i*i-1); } cout<<"编制由小到大的计算结果"<<" "<<sum<<endl;
本答案说明: 该 1-10 题所有结果均用 C++完成,其中有些题目编写的代码比较长,为了使得看
起来比较容易懂,程序的架构清晰,把 main()函数提到了前面,如果想要调试的话, 请把 main()函数之后附的的各种实现函数提前,程序就能正常运行。
该 11-15 题需要作图,所以采用 Matlab 编程实现。
运行结果如下:
代码如下: #include <iostream.h> //第 1 问 void nFromMintoMax(float n){
float sum; sum=0.0; for(float i=2;i<n;i++){
sum=sum+ (float)1.0/(i*i-1); } cout<<"编制从大到小的计算结果"<<" } //第 2 问
for(int j=nowj;j<n;j++){ a[i+1][j]=a[i+1][j]-r[i]*a[nowi][j];
} } } }
相关文档
最新文档