`

android平台从froyo 2.2开始支持jni单步调试了(转)

 
阅读更多
一、写在前面的话(可以理解为废话)前段时间从网上看了google的io大会,亲眼看到了google在it技术发展和创新领域所做的工作(在此也问候一下apple公司的美术家门,你们辛苦了)。虽然google认为未来pc上只可能存在两种程序——browser和game,但是就目前来看,pc平台上的application还是有一定的市场的,html5的推广和应用毕竟是需要一定时间的(第一个吃螃蟹的人,可能会吃的很好,但是如果第一个吃蘑菇的人呢?如果吃到的是毒蘑菇呢?业内都在等,在看,一旦别人吃的还行,那个时候才会蜂拥而上)。这就好像虽然google在大力鼓吹html5的各种特性,可是自己仍然在android平台上添加对flash 10.0的支持一样(用原话说:“hey,man,people use flash!”),从这一点来看google相对更加亲民一些,而apple则更加激进一些(这并不是说谁好,谁不好,偶也喜欢激进一点的风格拉,毕竟iphone颠覆了整个手机行业,一下子把ui设计的准绳拉得很高,这让一些诸如曾经卖木头的公司很郁闷)。

言归正传,froyo新增了许多功能,也改进了很多地方,但是偶认为对开发者来说最值得高兴的事情就是android 2.2修改了dalvik的运行机制(应该说是加入了类似jit引擎的东西吧),可以让程序运行得更快,另外就是支持jni的单步调试(看到这个特性偶的眼泪是哗哗的,想当年面对着jni模块输出的密密麻麻的log偶痛苦地闭上了眼睛。。。)。其他的诸如app to sd,无线ap,exchange,push api,语音翻译,搜索,等等这些都是锦上添花的事情了。

从偶的观点来看——速度才是硬道理!

要不然真是可惜了nexus one那1ghz的处理器了。

二、ndk-r4带给我们的惊喜
别的不说啥了,把changes.txt的重要的部分给翻译一下发出来就好了(英语好的朋友可以直接忽略)。
changes.txt的原文在android-ndk-r4/docs目录下:
重用要的BUG修正:
(1)<fenv.h>这个头文件在以前版本的ndk中放置的位置不对,这将导致在一些常规的编译过程中无法找到该文件进而引起编译失败。(这个问题在ndk-r4已经修正了)

重要的变化:
(1)在win32环境下,ndk需要配合1.7或者更高版本的cygwin使用。目前,已经官方认定在cygwin 1.5的环境下,ndk有可能不会正常工作。
(2)进一步简化编译过程:
开发者不再需要进入ndk的根目录,然后运行build/host-setup.sh脚本来初始化环境变量或者修改$NDK_ROOT/apps目录下面的任何文件了,取而代之的是在编译jni模块的时候,只需要在jni目录下面运行一个命令“ndk-build”即可自动完成编译过程(这个脚本甚至连子目录下面的模块都可以自动编译)。
ndk-build脚本的具体使用方法,可以参见overview.txt和ndk-build.txt这两个文档。
注意:
出于兼容性考虑,开发者仍然可以在"$NDK_ROOT/apps/<name>"中创建工程。但是ndk的示例工程已经从apps目录转移到了"samples/<name>"目录下,而且在编译jni模块的时候,一定要用"ndk-build"脚本进行编译。
(3)引入更加方便的调试手段:
从android 2.2开始(同样适用于未来更高版本的android系统),开发者可以使用“ndk-gdb”工具很方便地对native的模块进行调试。具体的调试方法参见“ndk-gdb.txt”文档。(这也是偶本文要讲的内容了)
(4)支持硬件的FPU:
根据ARMv7-a级别的设备,可以指定ndk生成新的“armeabi-v7a” ABI的机器码。
注意:
ndk在默认的配置下,仍然会生成旧的“armeabi” ABI(基于ARMv5TE指令集)的机器码,此配置可以在目前所知的所有android的系统image下工作。(费了半天劲,其实就是说ndk默认生成的模块兼容性比较好,而新引入的功能则可以经过优化以后性能更高,可以使用更先进的arm指令集)。

修改ndk生成机器码的配置主要通过修改mk文件的APP_ABI变量完成,具体的修改方法请参考application-mk.txt文档。

(5)提供了一个小型的“cpufeatures”静态库,可以通过该库在jni运行时得到当前cpu支持的特性。该库支持从android 1.5开始所有的平台。关于该库的更详细的信息,请参考cpu-features.txt文档。

(6)支持可选的ARM Advanced SIMD (a.k.a. NEON)特性,吧啦吧啦吧啦。下面几个cpu相关的特性,还是给对硬件优化感兴趣的朋友们研究好了。需要提一嘴的是,samples目录下面有一个叫做hello-neon的范例,就是演示cpu features的,感兴趣的朋友们不要错过。

(7)添加了<android/bitmap.h>头文件,可以提供jni模块对传入的android.graphics.Bitmap对象的直接操作(这个功能太有用了,否则,在jni里面操作Bitmap对象那叫一个麻烦。。。),使用方法可以参考samples目录下的bitmap-plasma示例程序。

另外,就是支持一些确保不会让模块被内核执行的一些安全功能以及一些bug修正,最后再提一句就是ndk-r4已经开始支持.s结尾的纯汇编代码编译了(之前的之能够支持嵌入式的汇编支持),骨灰级别的玩家注意了!

最后就是一些c和c++库的头文件的修改和微调,在此不再聒噪。


三、开始体验ndk-r4
看了上面的修改变化,想必大家都开始手痒了吧?!好的,马上就开始安装这个ndk-r4,当然,前提是sdk一定要更新到android 2.2这个平台对应的最新版本,当然相应的adt也要升级喔!

老规矩,偶的所有介绍都是基于linux平台的。

1、下载ndk-r4
官方的下载地址当然是:developer.android.com/sdk/ndk/index.html啦,不过由于和谐的原因我们下载不了。可以通过代理的方式去下载,相信大家总会有办法下载下来的。

2、安装ndk-r4
其实很简单了,只用一个命令就行:
$unzip android-ndk-r4-linux-x86.zip
解压完毕后会看到一个叫做android-ndk-r4的目录,这个目录需要export到当前的PATH环境变量里面去:
$export PATH=~/android-ndk-r4:$PATH
然后这个ndk就安装好了。(不要问我怎么不运行build/host-setup.sh脚本,那东西已经在r4被淘汰掉了)

3、编译个hello world看看
$cd ~/android-ndk-r4/samples/hello-jni/
$ndk-build
Gdbserver      : [arm-eabi-4.4.0] /home/wayne/android-ndk-r4/samples/hello-jni/libs/armeabi/gdbserver
Gdbsetup       : /home/wayne/android-ndk-r4/samples/hello-jni/libs/armeabi/gdb.setup
Gdbsetup       : + source directory /home/wayne/android-ndk-r4/samples/hello-jni/jni
Install        : libhello-jni.so => /home/wayne/android-ndk-r4/samples/hello-jni/libs/armeabi
如果看到上面的输出,呵呵,恭喜恭喜,jni的so库已经编译成功了。

4、生成一个apk看看吧
这一步比较烦,要求必须安装了ant以及最新的android sdk,并且把$ANDROID_SDK/tools和ant的bin目录也export到PATH环境变量里面才行。
在此偶只贴出来偶的配置:
$export PATH=/usr/local/apache-ant-1.8.1/bin:$PATH
$export PATH=/home/wayne/android-sdk-linux_86/tools:$PATH
当然了,这些对PATH的修改,可以直接写到/etc/profile文件中,下次一进入shell就会自动准备好,在此按下不表。

好了,开始生成apk
$cd ../
$android update project --path hello-jni
$cd hello-jni
$ant debug
Buildfile: /home/wayne/android-ndk-r4/samples/hello-jni/build.xml
    [setup] Android SDK Tools Revision 6
    [setup] Project Target: Android 2.2
    [setup] API level: 8
    [setup] WARNING: Attribute minSdkVersion in AndroidManifest.xml (3) is lower than the project target API level (8)
    [setup] Importing rules file: platforms/android-8/ant/ant_rules_r2.xml

-compile-tested-if-test:

-dirs:
     [echo] Creating output directories if needed...

-resource-src:
     [echo] Generating R.java / Manifest.java from the resources...

-aidl:
     [echo] Compiling aidl files into Java classes...

compile:
    [javac] /home/wayne/android-sdk-linux_86/platforms/android-8/ant/ant_rules_r2.xml:255: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 1 source file to /home/wayne/android-ndk-r4/samples/hello-jni/bin/classes

-dex:
     [echo] Converting compiled files and external libraries into /home/wayne/android-ndk-r4/samples/hello-jni/bin/classes.dex...

-package-resources:
     [echo] Packaging resources
[aaptexec] Creating full resource package...

-package-debug-sign:
[apkbuilder] Creating HelloJni-debug-unaligned.apk and signing it with a debug key...
[apkbuilder] Using keystore: /home/wayne/.android/debug.keystore

debug:
     [echo] Running zip align on final apk...
     [echo] Debug Package: /home/wayne/android-ndk-r4/samples/hello-jni/bin/HelloJni-debug.apk

BUILD SUCCESSFUL
Total time: 7 seconds
这些命令运行完毕后,如果看到上面的输出,代表生成的apk是正常的,然后就是安装程序。

5、安装和调试程序
偶是android的fans,因此,nexus one早早就刷了froyo 2.2,因此直接在手机上装了。鉴于很多朋友没有nexus one,偶在下面还是用emulator做演示比较好。

首先,运行android命令,新建一个2.2的emulator。(建立模拟器的方法不再聒噪,如下图所示)



其次,进入android-ndk-r4/samples/hello-jni/bin目录,应该能够找到一个apk安装包,直接安装即可。
$adb install ./HelloJni-debug.apk
1201 KB/s (78926 bytes in 0.064s)
        pkg: /data/local/tmp/HelloJni-debug.apk
Success
看到Success,就代表已经安装成功了。

然后,注意,忍受了偶上面那么多废话的朋友们,下面就是关键的地方了!
$cd ~/android-ndk-r4/samples/hello-jni/
$ndk-gdb
此时,观察模拟器的反应,hoho,是不是看到模拟器里面的hello-jni程序自己打开了?!



然后就是ndk-gdb自动进入了一个命令行提示符的状态:


and track explicitly loaded dynamic code.
warning: shared library handler failed to enable breakpoint
0xafd0eb in ?? ()
(gdb) list
       /*
        * Copyright (C)  The Android Open Source Project
        *
        * Licensed under the Apache License, Version 2.0 (the "License");
        * you may not use this file except in compliance with the License.
        * You may obtain a copy of the License at
        *
        *      [url=http://www.apache.org/licenses/LICENSE-2.0]http://www.apache.org/licenses/LICENSE-2.0[/url]
        *
		* Unless required by applicable law or agreed to in writing, software
(gdb) list
       * distributed under the License is distributed on an "AS IS" BASIS,
       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       * See the License for the specific language governing permissions and
       * limitations under the License.
       *
       */
      #include <string.h>
      #include <stdlib.h>
      #include <jni.h>

(gdb) list
      static void upper_str(char *s, int len) {
        int i ; 
        for(i = 0 ; i < len ; i++) {
          if((s[i] >='a') && (s[i] <='z')) {
            s[i] = s[i] - 'a' + 'A' ; 
          }
        }
      }

      /* This is a trivial JNI example where we use a native method
(gdb)



在linux做过开发的朋友们一定对gdb的命令行模式非常熟悉吧?到这里就一切豁然开朗了。

可能有朋友要问,怎么有一大堆的warning,好象是说什么符号找不到?
其实这很简单,android 2.2版本的模拟器自然是release版啦,debug版的一定慢得要死,所以,很多函数的库和符号是没有的,因此,在gdb里面根本找不到也是有情可原的,只要忽略掉这些就行了(偶是多么容易满足的人啊!在此赞叹一下。另外插一句,如果有人真的爱钻牛角尖,要弄清楚这个的话,可以尝试用android的源代码编译一个debug版的android,偶试过的可以调试native的程序,而且也没有这些warning,不过又会是一个痛苦的过程)。

然后就是常规的gdb调试命令了。
list-显示代码
x-查看内存
p-查看变量
b-设置断点
cont-程序继续运行
s-单步执行,但可以跟踪进入函数
n-单步执行,但不会进入函数
吧啦吧啦吧啦,关于gdb的使用,偶就不再聒噪了,网上相关说明非常多。

这里需要提醒一下,相信细心的朋友已经看到怎么偶的界面跟大家的hello-jni不一样?!

android的在线调试的基本原理并不是本地的gdb程序,而是在模拟器(或者真机)上启动了一个叫做gdb-server的东西,通过adb的tcp中转,让开发者本机的gdb与模拟器(或者真机)上的gdb-server进行连接,然后进行调试。这个过程相对比较繁琐,感兴趣的朋友可以参考ndk-gdb这个脚本(hoho,想当年偶调试native程序的时候,是自己写的连接gdb和gdb-server的脚本,期间问候了无数次google的祖宗多辈,在此按下不表)

在hello-jni里面,jni函数的调用是放在activity的oncreate函数中的,也就是说一程序一启动就已经调用了jni,而在pc端的gdb联上模拟器的gdb-server的时候,jni已经运行完了,而且oncreate函数也不是随便说调用就调用的,因此,在什么地方下断点呢?!偶就想了个土法,那就是修改一下原有的hello-jni程序,在里面添加一个小button,按下这个button的时候才会调用jni的函数。

如此一来,使用ndk-gdb的时候只是启动了activity,并不会真的调用jni函数,当偶把函数的断点都设置好以后,再运行“cont”命令,然后单击一下按钮,这个时候才会真的跑到断点里面来。

为了大家方便起见,偶把修改过后的hello-jni的源代码给贴出来。
希望本文能够对android平台开发的朋友们有所帮助。
分享到:
评论

相关推荐

    [转]好消息,android平台从froyo 2.2开始支持jni单步调试了

    标题中的“[转]好消息,android平台从froyo 2.2开始支持jni单步调试了”揭示了一个重要的更新,即从Android Froyo (2.2)版本开始,开发者可以利用Java Native Interface (JNI)进行单步调试。这是一个重大的进步,...

    基于vue的菜谱网站,前端采用vue,后端采用express,数据库采用mysql。.zip-毕设&课设&实训&大作业&竞赛&项目

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    数据分析全流程指南:从基础知识到实战项目的Python&R生态应用

    内容概要:本文档提供了关于数据分析全面的知识介绍与实战资源链接。首先,在数据分析的基础教程部分讲述了使用Python以及R两种语言来进行实际的数据分析工作所需具备的各项基本技能。其次,进阶教程涵盖从机器学习到深度学习的概念及其Python具体应用场景。接着,在工具有效利用层面介绍了多种热门库与平台的作用特点。在项目实践中,列举了四个实战案例:Titanic幸存者预测、房价预测、社交媒体情感倾向分析以及市场顾客购买模式研究,每个项目都有详细的技术流程指引。另外列出多个外部网站资源供进一步提升学习。 适用人群:本文主要面向有志于从事数据挖掘工作的学生和技术爱好者,同时也可辅助在职人士自我能力进阶。无论是在学术科研还是实际业务需求环境中都值得研读。 使用场景及目标:学习者将能够获取到系统的理论知识体系,熟悉业界主流软件包的功能优势,掌握具体业务问题解决方案路径,提高自身的综合技术素质,从而为个人职业规划增添竞争力。 其他说明:文档里推荐了不少高质量参考资料和实用线上学习社区,能有效补充专业知识空白并促进社交协作交流。

    从埃安泰国工厂竣工看中国车企加快海外建厂步伐.pptx

    从埃安泰国工厂竣工看中国车企加快海外建厂步伐.pptx

    复现改进的L-SHADE差分进化算法求解最优化问题详解:附MATLAB源码与测试函数集,复现改进的L-SHADE差分进化算法求解最优化问题详解:MATLAB源码与测试集全攻略,复现改进的L-SHADE

    复现改进的L-SHADE差分进化算法求解最优化问题详解:附MATLAB源码与测试函数集,复现改进的L-SHADE差分进化算法求解最优化问题详解:MATLAB源码与测试集全攻略,复现改进的L-SHADE差分进化算法求最优化问题 对配套文献所提出的改进的L-SHADE差分进化算法求解最优化问题的的复现,提供完整MATLAB源代码和测试函数集,到手可运行,运行效果如图2所示。 代码所用测试函数集与文献相同:对CEC2014最优化测试函数集中的全部30个函数进行了测试验证,运行结果与文献一致。 ,复现; 改进的L-SHADE差分进化算法; 最优化问题求解; MATLAB源代码; 测试函数集; CEC2014最优化测试函数集,复现改进L-SHADE算法:最优化问题的MATLAB求解与验证

    DCDC 电阻分压计算器

    可选择参考电压与输出电压 可选择电阻精度以及输出电压误差值

    西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional V14及更高版本的应用探索,西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional画面与

    西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional V14及更高版本的应用探索,西门子博途三部十层电梯程序案例解析:基于Wincc RT Professional画面与V14及以上版本技术参考,西门子1200博途三部十层电梯程序案例,加Wincc RT Professional画面三部十层电梯程序,版本V14及以上。 程序仅限于参考资料使用。 ,西门子;1200博途;三部十层电梯程序案例;Wincc RT Professional;V14以上程序版本。,西门子V14+博途三部十层电梯程序案例:Wincc RT Pro专业画面技术解析

    2023政务大数据解决方案.pptx

    2023政务大数据解决方案.pptx

    基于SSM设计的校园二手物品交易网站

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    基于java的学业跟踪评价系统设计的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文介绍了基于Java的学业跟踪评价系统的详细设计与实现,涵盖系统的多维度数据整合与评价、智能化学习建议、数据可视化和实时反馈等方面。系统通过收集课堂表现、作业成绩、考试成绩等多源数据,对学生的学业表现进行全面跟踪和评价,提供可视化反馈以及个性化的学习建议,促进家校互动,助力学生全面素质提升和发展。 适合人群:具备一定Java编程经验的研究者和开发者,特别是从事教育信息化领域的从业人员和技术爱好者。 使用场景及目标:该系统主要用于K12教育阶段、高等教育以及其他涉及教育培训的场景。其目的是提高教育管理效率、推进教育数字化转型和个人化教育实施。 其他说明:该文档详细介绍了系统的设计思路、功能模块和技术细节,并提供了完整的程序代码以及GUI设计说明。对于希望深入了解或实际部署学业跟踪评价系统的机构非常有参考价值。文中强调技术创新与实践经验相结合,突出了实用性和前瞻性特点。

    基于vue实现的WebAPP.zip

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

    rabbmit相关安装包

    erlang安装包,rabbmit安装环境

    linux 下的oracle数据库的开机启动脚本

    linux 下的oracle数据库的开机启动脚本,将里面的/home/oracle/app/oracle/product/11.2.0/dbhome_1 都改成你的oracle数据库的路径。在root用户下chmod +x 添加执行权限,然后./oracle_setup.sh 执行即可。

    基于目标级联分析法的多微网主动配电系统自治优化经济调度算法实现与初级应用,基于目标级联分析法的多微网主动配电系统自治优化经济调度算法实践:初级拉格朗日算法应用,GAMS代码:基于目标级联分析法的多微网

    基于目标级联分析法的多微网主动配电系统自治优化经济调度算法实现与初级应用,基于目标级联分析法的多微网主动配电系统自治优化经济调度算法实践:初级拉格朗日算法应用,GAMS代码:基于目标级联分析法的多微网主动配电系统自治优化经济调度 该代码并非完全复现该文献,而是参照文献 《基于目标级联分析法的多微网主动配电系统自治优化经济调度》 的目标级联分析法(ATC)的算法部分,采用初级的拉格朗日算法,主网与配网部分模型较为简化。 代码结构完整,注释详细,可读性较强,可以在此基础上进行修改或者移植。 适用于初学者学习ATC模型 ,GAMS代码;目标级联分析法(ATC);微网主动配电系统;自治优化经济调度;拉格朗日算法;主网与配网模型简化;代码结构完整;注释详细;可读性强;初学者学习ATC模型。,基于ATC算法的GAMS多微网经济调度优化代码:简化版学习指南

    基于ISODATA改进算法的负荷场景曲线聚类-适用于风光场景生成的高效算法创新,基于ISODATA改进算法的负荷场景曲线聚类(适用于风光场景生成,包含K-means等多种聚类方法与效果评价),基于I

    基于ISODATA改进算法的负荷场景曲线聚类——适用于风光场景生成的高效算法创新,基于ISODATA改进算法的负荷场景曲线聚类(适用于风光场景生成,包含K-means等多种聚类方法与效果评价),基于ISODATA改进算法的负荷场景曲线聚类(适用于风光场景生成) 摘要:代码主要做的是一种基于改进ISODATA算法的负荷场景曲线聚类,代码中,主要做了四种聚类算法,包括基础的K-means算法、ISODATA算法、L-ISODATA算法以及K-L-ISODATA算法,并且包含了对聚类场景以及聚类效果的评价,通过DBI的计算值综合对比评价不同方法的聚类效果,程序实现效果非常好,适合对于算法创新有需求的人,且也包含基础的k-means算法,用来学习也非常棒 另外,此代码同样适用于风光场景生成,自己准备好风光场景数据即可 代码非常精品,有部分注释; ,核心关键词: 1. 基于ISODATA改进算法 2. 负荷场景曲线聚类 3. K-means算法 4. 聚类场景评价 5. 聚类效果评价 6. DBI计算值 7. 算法创新需求 8. 风光场景生成 以上关键词用分号分隔为: 1. 基于ISO

    xpack-qemu-arm-8.2.2-1-win32-x64.zip

    xPack qemu arm 是一款高性能且跨平台的 ARM 架构虚拟机

    莫理莉+AI+为新型能源系统赋能-技术与建筑建筑供配电论坛琶洲.pptx

    莫理莉+AI+为新型能源系统赋能-技术与建筑建筑供配电论坛琶洲.pptx

    学生毕业离校系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计

    学生毕业离校系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 本系统分为学生、教师、管理员3个角色 (1)学生功能需求 学生进入系统可以查看首页、个人中心、离校流程、网站公告、费用结算管理、论文审核管理、我的收藏管理等操作。 (2)教师功能需求 教师进入系统可以查看首页、学生管理、离校流程管理、费用结算管理、论文审核管理等操作。 (2)管理员功能需求 管理员登陆后,主要功能模块包括首页、个人中心、学生管理、教师管理、离校信息管理、费用结算管理、论文审核管理、管理员管理、留言板管理、系统管理等功能。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。

    揭秘 OpenAI 在 2027 年前创建 AGI 的计划.pptx

    揭秘 OpenAI 在 2027 年前创建 AGI 的计划.pptx

    单极双极调制下,线路阻抗不匹配时两台单相逆变器并联的离散仿真模型研究,单极双极调制下,线路阻抗不匹配时单相逆变器Simulink并联仿真模型研究,单相逆变器Simulink并联离散仿真模型,输入电压4

    单极双极调制下,线路阻抗不匹配时两台单相逆变器并联的离散仿真模型研究,单极双极调制下,线路阻抗不匹配时单相逆变器Simulink并联仿真模型研究,单相逆变器Simulink并联离散仿真模型,输入电压400V,单台逆变器功率为2000W,使用下垂控制方案,在线路阻抗不匹配的情况下,实现两台逆变器并联。 可以选调制方案为单极性调制或者双极性调制。 离散模型,功率均分效果,两台逆变器输出电压和电流波形如下图。 ,核心关键词:单相逆变器; Simulink; 并联离散仿真模型; 输入电压400V; 单台功率2000W; 下垂控制方案; 线路阻抗不匹配; 调制方案; 单极性调制; 双极性调制; 功率均分效果。,离散仿真模型下,单相逆变器并联研究——400V输入、2000W功率均分实现

Global site tag (gtag.js) - Google Analytics