数值编程
㈠ 数值分析编程问题(关于精确度)
1/(loop_val)-1/((loop_val)
这些都写成
1.0/(loop_val)-1.0/((loop_val)
还有allsum,sum当然是0
你又没有赋过不是0的值
㈡ 我打算编一个数值程序,请问用什么语言编程好
几乎所有的语言都能实现,例如java、C、C++、pascal、basic、fortran、汇编甚至一些数据库脚本,现在用c\c++的多数用VC++或者C++builder,还有用C#也基本是C语法,用TC的多数是不得不写dos程序的,linux下用gcc,用pascal语言的就是delphi,TP基本上绝种了,也有人用Linux下的keylix,Basuc语言就是VB了,QB和TP的命运一样,Java的工具就多了,直接用JRE或者JBuilder什么的都可以。
Fortran这几年没人用了,只是在97年见过一个师兄拿他写东西。
这些语言中编译后效率最高的是汇编,不过除了写底层的那些家伙没人愿意用它,其次是C/C++,Pascal也可以,执行效率比较低的是Basic,java效率最低,以前Fortran 在数值计算领域与C不相上下,可惜现在没落了
㈢ 何为数字编程
估计你说的是fpga或者是cpld吧
FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个新概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。FPGA的基本特点主要有:
1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。 ——2)FPGA可做其它全定制或半定制ASIC电路的中试样片。
3)FPGA内部有丰富的触发器和I/O引脚。
4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
5)FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。
目前FPGA的品种很多,有XILINX的XC系列、TI公司的TPC系列、ALTERA公司的FIEX系列等。
FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。
加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。
FPGA有多种配置模式:并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA;外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。
㈣ 如何数字编程
假设输入的整数放到变量x中,则语句x/10%10即是十位上的数字,代码如下: #include int main(void){ int x; printf("输入一个整数:"); scanf("%d",&x); printf("%d的十位上的数字是:%d\n",x,x/10%10); return 0;}
㈤ 学数值分析怎样进行编程
当然可以用来编程了,比如数值分析中的龙贝格(Romberg)求积分的算法如下:
#include "iostream"
#include "cmath"
#include "iomanip"
using namespace std;
#define N 20
#define e 1E-10
typedef double TYPE;
TYPE f(TYPE x) {
if (x==0) return 1.0;
return sin(x)/x;
}
double T2n(double a,double b,int n=0,double Tn=0) {
double New=0;
double h;
if (n==0) {
h = b-a;
return (f(a)+f(b))*h/2;
}
h = (b-a)/n;
double x = a+h/2;
while (x<b) {
New += f(x);
x += h;
}
return (Tn+h*New)/2;
}
double Romberg(double a,double b) {
double T1,T2,S1,S2,C1,C2,R1,R2;
int k = 0,n=1;
cout<<setprecision(10)<<left;
cout<<"k "<<"T "<<" S "<<" C "<<" R "<<endl;
T1 = T2n(0,1);
cout<<setw(5)<<k<<setw(15)<<T1<<endl;
do {k++;
T2 = T2n(0,1,n,T1);
cout<<setw(5)<<k<<setw(15)<<T2;
S2 = (4*T2-T1)/3;
cout<<setw(15)<<S2;
if (k!=1) {
C2 = (16*S2-S1)/15;
cout<<setw(15)<<C2;
if (k!=2) {
R2 = (64*C2-C1)/63;
cout<<setw(15)<<R2;
if (k!=3 && fabs(R2-R1)<e) {
cout<<"\n\n迭代次数: "<<k<<endl<<endl;
return R2;
}
R1=R2;
}
C1=C2;
}
S1=S2;
T1 = T2;
n*=2;
// k++;
cout<<endl;
}while (k<N);
if (k==N) cout<<"\n迭代超过次数!!!\n"<<endl;
return 0;
}
int main ()
{
cout<<setprecision(10)
<<"最终结果为: "
<<Romberg(0,1)<<endl<<endl;
return 1;
}
//////////////////////////////
求得是f(x)=sin(x)/x从0-1上的积分.
总之数值分析很有用的,能解决许多现实中的数值问题。数学家们给出数学理论,数值分析将它们真正的应用到实际中。
许多图像处理的算法中都用到数值分析。
㈥ 数值方法编程题,用c语言或者matlab都行,高手帮帮忙。。。程序越详细越好。谢谢了~
(1)n个节点lagrange插值多项式程序
function yy=lagrange(x1,y1,xx)
%本程序为Lagrange1插值,其中x1,y1
%为插值节点和节点上的函数值,输出为插值点xx的函数值,
%xx可以是向量。
syms x
n=length(x1);
for i=1:n
t=x1;t(i)=[];L(i)=prod((x-t)./(x1(i)-t));% L向量用来存放插值基函数
end
u=sum(L.*y1);
p=simplify(u) % p是简化后的Lagrange插值函数(字符串)
yy=subs(p,x,xx);
clf
plot(x1,y1,'ro',xx,yy,'*')
========
命令窗口命令及结果
format long g
>> lagrange([11 12],[0.190809 0.207912],11.5)
p =
(616200515415341*x)/36028797018963968 + 96413060822745/36028797018963968
ans =
0.1993605
>> lagrange([11 12 13],[0.190809 0.207912 0.224951],11.5)
p =
- (1152921504607*x^2)/36028797018963968 + (321358855010651*x)/18014398509481984 - 55772577785379/36028797018963968
ans =
0.1993685
>> sin(11.5*pi/180)
ans = 0.199367934417197
(2)
function f = Newton(x,y,x0)
%本程序为Newton插值,其中x,y
%为插值节点和节点上的函数值,输出为插值点x0的函数值,
%x0可以是向量。
syms t;
if(length(x) == length(y))
n = length(x);
c(1:n) = 0.0;
else
disp('x和y的维数不相等!');
return;
end
f = y(1);
y1 = 0;
l = 1;
for(i=1:n-1)
for(j=i+1:n)
y1(j) = (y(j)-y(i))/(x(j)-x(i));
end
c(i) = y1(i+1);
l = l*(t-x(i));
f = f + c(i)*l;
simplify(f)
y = y1;
if(i==n-1)
if(nargin == 3)
f = subs(f,'t',x0);
else
f = collect(f); %将插值多项式展开
f = vpa(f, 6);
end
end
end
==========
fn=Newton([11 12],[0.190809 0.207912],11.5)
ans =
(616200515415341*t)/36028797018963968 + 96413060822745/36028797018963968
fn =
0.1993605
>> fn=Newton([11 12 13],[0.190809 0.207912 0.224951],11.5)
ans =
(616200515415341*t)/36028797018963968 + 96413060822745/36028797018963968
ans =
- (1152921504607*t^2)/36028797018963968 + (321358855010651*t)/18014398509481984 - 55772577785379/36028797018963968
fn =
0.1993685
㈦ 数值分析编程matlab
数值分析有好几块啊。
对于积分可以看:http://www.matlabsky.com/thread-7210-1-1.html
常微分方程可以看:http://www.matlabsky.com/thread-526-1-1.html
当然还有其它的一些,看你要什么方面的。
=============
(一题)
%(1)
clear
n=9;
[ii,jj]=meshgrid(1:n);
A=(ii+jj-1).^2;
%A=(ii+jj).^2; %(2)
%A=1./(ii+jj-1); %(3)
b=sum(A,2);
%%下面两行是测试函数
%A=rand(n );
%b=rand(n,1);
AA=A;
bb=b;
for i=1:n-1
%选主元
[maindiag(i),index]=max(abs(A(i:end,i)));
index=index+i-1;
%交换行i<--->index
temp=A(index,: );
A(index,: )=A(i,: );
A(i,: )=temp;
temp=b(index);
b(index)=b(i);
b(i)=temp;
%消行
for j=i+1:n
temp=A(j,i)/A(i,i);
A(j,: )=A(j,: )-temp*A(i,: );
b(j )=b(j )-temp*b(i);
end
A;
end
%上三角求解
for i=n:-1:1
for j=1:i-1
temp=A(j,i)/A(i,i);
A(j,: )=A( j,: )-temp*A(i,: );
b(j )=b(j )-temp*b(i);
end
x(i)=b(i)/A(i,i);
end
maindiag %查看列主元
AA*x'-bb %由于矩阵奇异,列主元法得到的解不准确
%%(1)例在n<=6时,列主元法可行,n>6列主元法失效
============
(二题)
clear
x=-5:0.5:5;
x=x(:);
y=[0,-0.0001,-0.0002,-0.0003,-0.0004,-0.0048,-0.0366,-0.1581,-0.3679,-0.3894,0,0.3894,0.3679,0.1581,0.0366,0.0048,0.0004,0.0003,0.0002,0.0001,0];
y=y(:);
yy=[];
ii=1:2:7;
for i=1:length(ii)
p=polyfit(x,y,ii(i));
yy(:,i)=polyval(p,x);
info{i}=num2str([num2str(ii(i)),'次多项式']);
end
p=spline(x,y);
yy(:,end+1)=ppval(p,x);
info{end+1}='样条';
info{end+1}='原始数据';
plot(x,yy,x,y,'*')
legend(info,'location','NorthWest')
㈧ 在编程中定义某数值该怎么弄
在 C 语言、以及C++编程中定义数值分为两类:常量和变量。如果是定义常量的话,其优点是:在以后的代码中,凡是所有涉及到该常量值的地方,都会自动替换,而不需要人工地在程序的每一处进行替换。例如:
#define MAX 1000 /* 定义一个常量 MAX,其最大值为 1000,以后如果程序中涉及到该常量值的地方,都会自动进行替换,程序可读性、以及可移植性都非常好 */
如果是定义变量,那么就要在变量名的前面写上:数据类型以及变量名。例如:
int my_var ; /* 定义一个标准的整型变量,变量名称为:my_var */
float my_float ; /* 定义一个标准的浮点型变量,变量名称为:my_float */
typedef struct myself_datatype /* 定义一个结构体 */
{
int x, y , z ;
float x1, y1, z1 ;
} myself_define ; /* 用户自定义的数据类型,数据类型为:myself_define */
myself_define myself_var ; /* 定义一个用户自定义的数据类型变量,变量名为:myself_var。
㈨ 数值计算编程
给你参考下吧
//牛顿下山法
//非线性方程求根
#include"iostream"
#include"stdlib.h"
#include"math.h"
#include"conio.h"
using namespace std;
double function(double x)
{
return x*x*x-x-1;
}
double function_(double x)
{
return 3*x*x-1;
}
void error_output(int p)
{
switch(p)
{
case 1:cout<<"超出下山次数,请另选择初值!"<<endl;
case 2:cout<<"超出迭代次数,失败!";
}
}
int main()
{
double x,e,l=1,x1;
int m,n,k=1,j;
cout<<"请输入初值: ";
cin>>x;
cout<<"输入精度: ";
cin>>e;
cout<<"输入最大迭代次数 : ";
cin>>m;
cout<<"输入最大下山次数: ";
cin>>n;
loop:
j=1;
if(function(x)==0){
cout<<"该初值就是方程的根!";
cout<<endl;
return 1;
}
x1=x-l*function(x)/function_(x);
for(l=1,j=1;j<=n&&k==1;j++)
{
x1=x-l*function(x)/function_(x);
if(fabs(function(x1))>fabs(function(x))){
l=l/2;
cout<<"x0 "<<x<<" x1 "<<x1<<endl;
}
else break;
}
for(l=1,j=1;j<=n&&k!=1;j++)
{
x1=x-l*function(x)/function_(x);
if(fabs(function(x1))>fabs(function(x))){
l=l/2;
cout<<"x0 "<<x<<" x1 "<<x1<<endl;
}
else break;
}
if(j>n)error_output(1);
if(fabs(x1-x)<e)cout<<"求得方程的根:"<<x1<<endl;
else{
if(k==m)error_output(2);
else {
k=k+1;
x=x1;
goto loop;
}
}
getch();
return 1;
}
㈩ 数字编程是什么
前提你是用什么工具画的,如果用的CAD的话,首先保证CAD的格式是DXF,然后用U盘拷贝,打开HL中的格式转换,DXF------DXT,再选中U盘里面的图,格式转换之后,再到AUTOP画图程序里面打开文件,打开这个图之后,在进行加工路线的设置,再代码存盘,最后到加工1不就有了么!(代码存盘之后,文件后缀变成3B)