# include<stdio.h> # include<math.h> # define N 3 main(){ float NF2(float *x,float *y); float A[N][N]={{10,-1,-2},{-1,10,-2},{-1,-1,5}}; float b[N]={7.2,8.3,4.2},sum=0; float x[N]= {0,0,0},y[N]={0},x0[N]={}; int i,j,n=0; for(i=0;i<N;i++) { x[i]=x0[i]; } for(n=0;;n++){ //計(jì)算下一個(gè)值 for(i=0;i<N;i++){ sum=0; for(j=0;j<N;j++){ if(j!=i){ sum=sum+A[i][j]*x[j]; } } y[i]=(1/A[i][i])*(b[i]-sum); //sum=0; } //判斷誤差大小 if(NF2(x,y)>0.01){ for(i=0;i<N;i++){ x[i]=y[i]; } } else break; } printf("經(jīng)過%d次雅可比迭代解出方程組的解:\n",n+1); for(i=0;i<N;i++){ printf("%f ",y[i]); } } //求兩個(gè)向量差的二范數(shù)函數(shù) float NF2(float *x,float *y){ int i; float z,sum1=0; for(i=0;i<N;i++){ sum1=sum1+pow(y[i]-x[i],2); } z=sqrt(sum1); return z; }
上傳時(shí)間: 2019-10-13
上傳用戶:大萌萌撒
簡易負(fù)離子發(fā)生器負(fù)離子增加,對人有催眠、止汗、鎮(zhèn)痛、增進(jìn)食欲,使人精神爽快,消除疲勞的作用。圖1是負(fù)離子發(fā)生器電路圖。220V交流市電經(jīng)D1整流后向C3和C2充電,當(dāng)C2充電至氖泡導(dǎo)通并觸發(fā)SCR導(dǎo)通時(shí),C3經(jīng)SCR、B的L1放電,經(jīng)B感應(yīng)升壓后,由D2反向整流得8kV直流高壓使發(fā)生器M的分子電離而產(chǎn)生負(fù)離子。調(diào)整R3的阻值可以改變觸發(fā)頻率和輸出電壓。調(diào)整時(shí)必須注意安全,更換元件需撥下電源插頭
標(biāo)簽: 負(fù)離子發(fā)生器
上傳時(shí)間: 2013-10-29
上傳用戶:731140412
有兩種方式可以讓設(shè)備和應(yīng)用程序之間聯(lián)系:1. 通過為設(shè)備創(chuàng)建的一個(gè)符號(hào)鏈;2. 通過輸出到一個(gè)接口WDM驅(qū)動(dòng)程序建議使用輸出到一個(gè)接口而不推薦使用創(chuàng)建符號(hào)鏈的方法。這個(gè)接口保證PDO的安全,也保證安全地創(chuàng)建一個(gè)惟一的、獨(dú)立于語言的訪問設(shè)備的方法。一個(gè)應(yīng)用程序使用Win32APIs來調(diào)用設(shè)備。在某個(gè)Win32 APIs和設(shè)備對象的分發(fā)函數(shù)之間存在一個(gè)映射關(guān)系。獲得對設(shè)備對象訪問的第一步就是打開一個(gè)設(shè)備對象的句柄。 用符號(hào)鏈打開一個(gè)設(shè)備的句柄為了打開一個(gè)設(shè)備,應(yīng)用程序需要使用CreateFile。如果該設(shè)備有一個(gè)符號(hào)鏈出口,應(yīng)用程序可以用下面這個(gè)例子的形式打開句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統(tǒng)本調(diào)用希望打開一個(gè)設(shè)備。這個(gè)設(shè)備必須有一個(gè)符號(hào)鏈,以便應(yīng)用程序能夠打開它。有關(guān)細(xì)節(jié)查看有關(guān)Kdevice和CreateLink的內(nèi)容。在上述調(diào)用中第一個(gè)參數(shù)中前綴后的部分就是這個(gè)符號(hào)鏈的名字。注意:CreatFile中的第一個(gè)參數(shù)不是Windows 98/2000中驅(qū)動(dòng)程序(.sys文件)的路徑。是到設(shè)備對象的符號(hào)鏈。如果使用DriverWizard產(chǎn)生驅(qū)動(dòng)程序,它通常使用類KunitizedName來構(gòu)成設(shè)備的符號(hào)鏈。這意味著符號(hào)鏈名有一個(gè)附加的數(shù)字,通常是0。例如:如果鏈接名稱的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應(yīng)用程序需要被覆蓋的I/O,第六個(gè)參數(shù)(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個(gè)輸出接口打開句柄用這種方式打開一個(gè)句柄會(huì)稍微麻煩一些。DriverWorks庫提供兩個(gè)助手類來使獲得對該接口的訪問容易一些,這兩個(gè)類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個(gè)設(shè)備信息集,該信息集包含了特殊類中的所有設(shè)備接口信息。應(yīng)用程序能有用CdeviceInterfaceClass類的一個(gè)實(shí)例來獲得一個(gè)或更多的CdeviceInterface類的實(shí)例。CdeviceInterface類是一個(gè)單一設(shè)備接口的抽象。它的成員函數(shù)DevicePath()返回一個(gè)路徑名的指針,該指針可以在CreateFile中使用來打開設(shè)備。下面用一個(gè)小例子來顯示這些類最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在設(shè)備中執(zhí)行I/O操作一旦應(yīng)用程序獲得一個(gè)有效的設(shè)備句柄,它就能使用Win32 APIs來產(chǎn)生到設(shè)備對象的IRPs。下面的表顯示了這種對應(yīng)關(guān)系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解釋一下設(shè)備類成員的Close和CleanUp:CreateFile使內(nèi)核為設(shè)備創(chuàng)建一個(gè)新的文件對象。這使得多個(gè)句柄可以映射同一個(gè)文件對象。當(dāng)這個(gè)文件對象的最后一個(gè)用戶級(jí)句柄被撤銷后,I/O管理器調(diào)用CleanUp。當(dāng)沒有任何用戶級(jí)和核心級(jí)的對文件對象的訪問的時(shí)候,I/O管理器調(diào)用Close。如果被打開的設(shè)備不支持指定的功能,則調(diào)用相應(yīng)的Win32將引起錯(cuò)誤(無效功能)。以前為Windows95編寫的VxD的應(yīng)用程序代碼中可能會(huì)在打開設(shè)備的時(shí)候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個(gè)屬性,因?yàn)樗鼘?dǎo)致沒有特權(quán)的用戶企圖打開這個(gè)設(shè)備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數(shù)轉(zhuǎn)換成IRP域的方法依賴于設(shè)備對象的屬性。當(dāng)設(shè)備設(shè)置DO_DIRECT_IO標(biāo)志,I/O管理器將buff鎖住在存儲(chǔ)器中,并且創(chuàng)建了一個(gè)存儲(chǔ)在IRP中的MDL域。一個(gè)設(shè)備可以通過調(diào)用Kirp::Mdl來存取MDL。當(dāng)設(shè)備設(shè)置DO_BUFFERED_IO標(biāo)志,設(shè)備對象分別通過KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或?qū)懖僮鳙@得buff地址。當(dāng)設(shè)備不設(shè)置DO_BUFFERED_IO標(biāo)志也不設(shè)置DO_DIRECT_IO,內(nèi)核設(shè)置IRP 的UserBuffer域來對應(yīng)ReadFile或WriteFile中的buff參數(shù)。然而,存儲(chǔ)區(qū)并沒有被鎖住而且地址只對調(diào)用進(jìn)程有效。驅(qū)動(dòng)程序可以使用KIrp::UserBuffer來存取IRP域。對于DeviceIoControl調(diào)用,buffer參數(shù)的轉(zhuǎn)換依賴于特殊的I/O控制代碼,它不在設(shè)備對象的特性中。宏CTL_CODE(在winioctl.h中定義)用來構(gòu)造控制代碼。這個(gè)宏的其中一個(gè)參數(shù)指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對應(yīng)的能獲得輸入緩沖與輸出緩沖的KIrp中的成員函數(shù):Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代碼指明METHOD_BUFFERED,系統(tǒng)分配一個(gè)單一的緩沖來作為輸入與輸出。驅(qū)動(dòng)程序必須在向輸出緩沖放數(shù)據(jù)之前拷貝輸入數(shù)據(jù)。驅(qū)動(dòng)程序通過調(diào)用KIrp::IoctlBuffer獲得緩沖地址。在完成時(shí),I/O管理器從系統(tǒng)緩沖拷貝數(shù)據(jù)到提供給Ring 3級(jí)調(diào)用者使用的緩沖中。驅(qū)動(dòng)程序必須在結(jié)束前存儲(chǔ)拷貝到IRP的Information成員中的數(shù)據(jù)個(gè)數(shù)。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數(shù)呈現(xiàn)不同的含義。參數(shù)InputBuffer被拷貝到一個(gè)系統(tǒng)緩沖,這個(gè)緩沖驅(qū)動(dòng)程序可以通過調(diào)用KIrp::IoctlBuffer。參數(shù)OutputBuffer被映射到KMemory對象,驅(qū)動(dòng)程序?qū)@個(gè)對象的訪問通過調(diào)用KIrp::Mdl來實(shí)現(xiàn)。對于METHOD_OUT_DIRECT,調(diào)用者必須有對緩沖的寫訪問權(quán)限。注意,對METHOD_NEITHER,內(nèi)核只提供虛擬地址;它不會(huì)做映射來配置緩沖。虛擬地址只對調(diào)用進(jìn)程有效。這里是一個(gè)用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來定義一個(gè)IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現(xiàn)在使用一個(gè)DeviceIoControl調(diào)用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,這里放的是包含有執(zhí)行操作命令的字符串指針 0, FirmwareRev, //這里是output串指針,存放從驅(qū)動(dòng)程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果輸出緩沖足夠大,設(shè)備拷貝串到里面并將拷貝的資結(jié)束設(shè)置到FirmwareRevSize中。在驅(qū)動(dòng)程序中,代碼看起來如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
標(biāo)簽: 驅(qū)動(dòng)程序 應(yīng)用程序 接口
上傳時(shí)間: 2013-10-17
上傳用戶:gai928943
CPU在處理某一事件時(shí),發(fā)生了另一事件請求CPU迅速去處理。CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B。待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A。這一處理過程稱為中斷。介紹用匯編和C語言兩語言的源程序,愿給大家?guī)韼椭?前面我已經(jīng)上傳了幾個(gè)程序,沒幾天卻失蹤了。但這次的不會(huì)失蹤,能保留上幾天。
上傳時(shí)間: 2014-12-31
上傳用戶:dianxin61
當(dāng)一個(gè)VI A.vi在VI B.vi 中使用,就稱A.vi為B.vi的子VI,B.vi為A.vi的主VI。子VI 相當(dāng)于文本編程語言中的子程序。 在主VI的程序框圖中雙擊子VI的圖標(biāo)時(shí),將出現(xiàn)該子VI 的前面板和程序框圖。在前面板窗口和程序框圖窗口的右上角可以看到該VI 的圖標(biāo)。該圖標(biāo)與將VI放置在程序框圖中時(shí)所顯示的圖標(biāo)相同。
標(biāo)簽:
上傳時(shí)間: 2013-10-31
上傳用戶:jisujeke
利用橫向遞歸算法解決數(shù)據(jù)組合的問題, 比如數(shù)組為a, 長度為len, 橫向遞歸 B display(a,len) b是二維數(shù)組,a是一維數(shù)組
標(biāo)簽: 遞歸 算法 數(shù)據(jù)組合
上傳時(shí)間: 2015-03-21
上傳用戶:tb_6877751
一個(gè)比較簡單的算法程序。輸入一些數(shù),計(jì)算后按照矩陣的形式輸出。設(shè)了三個(gè)數(shù)組a[],b[],c[]。分別實(shí)現(xiàn)c[]=a[]+b[],c[]=a[]-b[],c[]=a[]*b[]。
上傳時(shí)間: 2015-03-23
上傳用戶:qilin
如果整數(shù)A的全部因子(包括1,不包括A本身)之和等于B;且整數(shù)B的全部因子(包括1,不包括B本身)之和等于A,則將整數(shù)A和B稱為親密數(shù)。求3000以內(nèi)的全部親密數(shù)。 *題目分析與算法設(shè)計(jì) 按照親密數(shù)定義,要判斷數(shù)a是否有親密數(shù),只要計(jì)算出a的全部因子的累加和為b,再計(jì)算b的全部因子的累加和為n,若n等于a則可判定a和b是親密數(shù)。計(jì)算數(shù)a的各因子的算法: 用a依次對i(i=1~a/2)進(jìn)行模運(yùn)算,若模運(yùn)算結(jié)果等于0,則i為a的一個(gè)因子;否則i就不是a的因子。 *
標(biāo)簽: 整數(shù)
上傳時(shí)間: 2015-04-24
上傳用戶:金宜
二分圖是一個(gè)無向圖,它的n 個(gè)頂點(diǎn)可二分為集合A和集合B,且同一集合中的任意兩個(gè)頂點(diǎn)在圖中無邊相連(即任何一條邊都是一個(gè)頂點(diǎn)在集合A中,另一個(gè)在集合B中)。當(dāng)且僅當(dāng)B中的每個(gè)頂點(diǎn)至少與A中一個(gè)頂點(diǎn)相連時(shí),A的一個(gè)子集A 覆蓋集合B(或簡單地說,A 是一個(gè)覆蓋)。覆蓋A 的大小即為A 中的頂點(diǎn)數(shù)目。當(dāng)且僅當(dāng)A 是覆蓋B的子集中最小的時(shí),A 為最小覆蓋。
上傳時(shí)間: 2015-05-07
上傳用戶:alan-ee
1.能實(shí)現(xiàn)不同的個(gè)數(shù)的矩陣連乘. 2.最后矩陣大小是8X8. 3是最優(yōu)的矩陣相乘. 描 述:給定n 個(gè)矩陣{A1, A2,...,An},其中Ai與Ai+1是可乘的,i=1,2…,n-1。考察這n個(gè)矩陣的連乘積A1A2...An。矩陣A 和B 可乘的條件是矩陣A的列數(shù)等于矩陣B 的行數(shù)。若A 是一個(gè)p x q矩陣,B是一個(gè)q * r矩陣,則其乘積C=AB是一個(gè)p * r矩陣,需要pqr次數(shù)乘。
上傳時(shí)間: 2013-12-04
上傳用戶:wang5829
蟲蟲下載站版權(quán)所有 京ICP備2021023401號(hào)-1