
#include "stdio.h"
#define List_Size 20
struct RecordType
{
int key//简单查找
char otherkey
}
struct RecordList
{
RecordType r[List_Size+1]
int length
}list1,*p
void init_list()
{
int i //初始化数据
p=&list1
for(i=0i<List_Size+1i++)
{
p->r[i].key =i
p->贺亮亏r[i].otherkey =i+1
}
p->length =List_Size+1
for(i=0i<List_Size+1i++) //确认初始化数据
{
printf("list.r[%d].key=%d,list.r[%d].otherkey=%d\n",i,p->r[i].key,i,p->键兄r[i].otherkey)
}
printf("list.length=%d\n",p->length)
}
int BinSrch(RecordList L,int k) //二分差算法
{
int low,high,mid
int i=0
low = 0 //初始禅神化low
high=L.length-1
while(low<=high)
{
mid=(low+high)/2
if(k==L.r[mid].key)
{
i=midbreak
}
else
{
if(k <L.r[mid].key)
{
high=mid-1
}
else
low=mid+1
}
}
// if((low==high)&&(k!=L.r[mid].key))
// {
// return (0)
// }
return (i)
}
void main()
{
int result=0
p=&list1
init_list()
result=BinSrch(list1,7)
printf("the reslut=%d",result)
getchar()
}
一些关于差分的知识可以看看一阶差分:gradient命令
二阶差分:del2命令
用法help一下。
如:
[f(x+h) – 2f(x) + f(x – h)]/h^2 (1)
这里h是步长。 这历码槐个公式肢友是一元函数二阶导用差分公式近似的表达,在matlab里可以用del2命令实现。
del2命令用来对函数的laplacian离散近似,方法如下:
给定函数u,它的laplacian为 2×N×del2(u,h),其中N是问题的维数,比方说二元函数u(x,y),此时N=2, 对三元 函 数,四元函数依次类推;
注意,对于一元函数,此时N必须依然取2(模睁matlab中并未给出明确的对这个特例的说明),所以函数f(x)的laplacian是2×2×del2(f,h)。
公式(1)实际上是一元函数f(x)的二阶导,而对于一元函数来说,它的laplacian就是它的二阶导,即:
f’’(x) = laplacian(f) = [f(x+h) – 2f(x) + f(x – h)]/h^2 = 2*2*del2(f,h)
楼主可以试试如下例子:
x = 0:0.01:1
y = x.^3
ythe = 6*x %理论二阶导
yapp = 2*2*del2(y,0.01)%matlab数值近似
plot(x,ythe,'*')
hold on
plot(x,yapp,'r')
hold off
差分是针对离散情况如离散向量、数亩正字图像等来讲的,而导数是针对连续函数来培御讲的配耐岩,这两种情况都可以用diff函数来求 离散情况如: a=[1 2 3], diff(a) = [1 1]连续情况如: syms x y y=x^2diff(y,x)=2*x 望采纳欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)