- ardim
-
今天正好看到这个。
“Langacker(1987)提到两种范畴化的概念:一种是基于原型的范畴化(categorization by prototypes),一是基于图示的范畴化(categorization by shema)。基于原型的范畴化可以这样表述:一个类当中有一个最典型的成员,是这个类的原型。该类中的其他成员根据与原型的相似程度而与原型具有相应的对应关系,这种相似程度是有层次的,有的成员与原型相似性多一些,有的成员与原型相似性少一些。基于图示的范畴化理论与原型理论恰好相反:图式建立在所有成员的共同特征的基础上,其中各个成员是部分层次的,一个图式可以涵盖该图式中的所有成员。”(崔希亮.认知语言学:研究范围和研究方法.语言教学与研究.2002年(05):4-15)
简单来说,原型的意思就是所有范畴都有一个最典型的,然后同范畴内部具有家族相似性,因此他们从典型到边缘有层级。图式的意思是范畴内部都具有共同特征(而不是家族相似性),因此范畴内部没有层次。他们是对世界的两种不同的范畴化。
- meira
-
原型
原来的类型或模型,特指文学艺术作品中塑造人物形象所依据的现实生活中的人。
图式(schema)
表征特定概念、事物或事件的认知结构,它影响对相关信息的加工过程,也指生物形态学的图式(pattern)或形态(form)发生,或在计算科学中的图式、模式识别以及系统(system)或完形心理学等概念,也涉及分形(Fractal)或拓朴几何学等。 在皮亚杰认知发展理论中,图式是指一个有组织、可重复的行为模式或心理结构,是一种认知结构的单元。一个人的全部图式对组成一个人的认知结构。
1、图式一旦形成,具有相当的稳定性。 2、图式决定着人做信息选择时相应的内容和倾向偏好。 3、可引起新信息的加工。在原来图示的基础上,新的内容会被添加更新,形成新的认识。 4、可以预测事件的发展。
相比几乎没什么关系。
如果牵强的说那就是一样的具有稳定性。
求大侠帮看语法是否有错误?在下面的问题补充里面。
似乎有点汉语式英语的意思,不过据本人水平看无语法错误!2023-07-29 19:12:373
比较详细的javascript对象的property和prototype是什么一种关系_javascript技巧
ECMAScript可以识别两种类型的对象,一种叫做Native Object属于语言范畴;一种叫做Host Object,由运行环境提供例如document对象, Dom Node等 Native objects是一种松散的结构并且可以动态的增加属性(property),所有的属性都有一个名字和一个值,这个值可以是另一个对象的引用 或者是内建的数据类型(String, Number, Boolean, Null 或者 Undefined) 下面的这个简单的例子描述了一个javascript对象是如何设置一个属性的值和如何读取属性的值的。 赋值操作 一个对象的属性的创建非常简单,直接通过赋值操作就可以完成属性的创建。 代码 1. var objectRef = new Object(); //create a generic javascript object. 一个名为testNumber的属性可以这样创建。 代码 1. objectRef.testNumber = 5; 2. /* - or:- */ 3. objectRef["testNumber"] = 5; 如果复制的属性名称已经存在那么不会再次创建这个属性,赋值操作仅仅是重新设置属性的值 代码 1. objectRef.testNumber = 8; 2. /* - or:- */ 3. objectRef["testNumber"] = 8; js对象的原型(prototype)自己本身也可以是对象,也可以有属性(property),对于js对象的(prototype)的赋值操作跟普通对象属性的创建 没什么不同。 取值操作 在取值操作中property和prototype就不一样了,先看最简单的property取值操作。 代码 1. /*为一个对象的属性赋值,如果这个对象没有这个属性,那么在赋值操作后,这个对象就有这个属性了 */ 2. objectRef.testNumber = 8; 3. /* 读出这个属性的值 */ 4. var val = objectRef.testNumber; 5. 6. /* 现在val 就得到了刚才赋予objectRef的值8了*/ prototype揭密 但是所有的对象都可以有prototypes, prototypes自己也是对象,那么他也可以有prototypes,这样循环下去就形成了一个prototype链, 这个链当他遇到链中队形的prototype是null时中止。(Object的默认的prototype是null) 代码 1. var objectRef = new Object(); //create a generic javascript object. 创建一个新的js对象,这时这个对象的prototype是Null,所以objectRef的prototype链只包含一个对象Object.prototype 我们在看下面的代码 代码 1. /* 构建MyObject1这个类型的构造函数 2. MyObject1 - type. 3. */ 4. function MyObject1(formalParameter){ 5. /* 为者对象创建一个属性名字叫testNumber 6. */ 7. this.testNumber = formalParameter; 8. } 9. 10. /* 构建MyObject2这个类型的构造函数 11. MyObject2 - type:- 12. */ 13. function MyObject2(formalParameter){ 14. /* 为者对象创建一个属性名字叫testString*/ 15. this.testString = formalParameter; 16. } 17. 18. /* 下一步的操作会用MyObject1对象替换掉MyObject2默认的prototype属性*/ 19. MyObject2.prototype = new MyObject1( 8 ); 20. 21. /* 最后我们创建MyObject2类型的一个对象*/ 22. 23. var objectRef = new MyObject2( "String_Value" ); objectRef这个MyObject2类型的对象有一个prototype的链,链中的第一个对象是MyObject1对象,MyObject1对象也有prototype, 这个prototype是Object默认的prototype,Object.prototype的prototype是null,至此这条prototype链结束。 当一个取值操作发生时,objectRef 的整个prototype链就开始工作 代码 1. var val = objectRef.testString; objectRef这个对象的有一个属性叫做testString,那么这句代码会把testString的值赋给val 代码 1. var val = objectRef.testNumber; 在objectRef这个对象里并没有testNumber这个属性,但是val却的到了值8,而不是undefine,这是因为解释器在没有在当前对象找到要找 的属性后,就会去检查这个对象的prototype,objectRef的prototype是MyObject1对象,这个对象有testNumber这个属性,所以val得到8这个值。 代码 1. var val = objectRef.toString; 现在val是个function的引用,这个function是Object.prototype的property,由于MyObject1和MyObject2都没有定义toString这个property 所以Object.prototype返回。 代码 1. var val = objectRef.madeUpProperty; 最后val是undefined,因为MyObject1和MyObject2,还有Object都没有定义madeUpProperty这个property,所以得到的是undefine. 读操作会读取在obj自己和prototype 链上发现的第一个同名属性值 写操作会为obj对象本身创建一个同名属性(如果这个属性名不存在 这就意味着objectRef.testNumber = 3会在objectRef对象上创建一个property,名字是testNumber,当下一次在要读取testNumber时 propertype链就不会工作,仅仅会得到objectRef的property 3,而MyObject1的testNumber属性并不会被修改。下面的代码可以验证 代码 1. /* 构建MyObject1这个类型的构造函数 2. MyObject1 - type. 3. */ 4. function MyObject1(formalParameter){ 5. /* 为者对象创建一个属性名字叫testNumber 6. */ 7. this.testNumber = formalParameter; 8. } 9. 10. /* 构建MyObject2这个类型的构造函数 11. MyObject2 - type:- 12. */ 13. function MyObject2(formalParameter){ 14. /* 为者对象创建一个属性名字叫testString*/ 15. this.testString = formalParameter; 16. } 17. 18. /* 下一步的操作会用MyObject1对象替换掉MyObject2默认的prototype属性*/ 19. var obj1 = new MyObject1( 8 ); 20. MyObject2.prototype = obj1; 21. 22. /* 最后我们创建MyObject2类型的一个对象*/ 23. 24. var objectRef = new MyObject2( "String_Value" ); 25. 26. alert(objectRef.testNumber); 27. objectRef.testNumber = 5; 28. alert(objectRef.testNumber); 29. alert(obj1.testNumber);2023-07-29 19:12:441
翻译下面这句话?
have sb. brought让某人 被 带去2023-07-29 19:12:543
异星工厂机械臂怎么调
1.在基础包中的“dat.lua”中找到有可能保存机械臂功能的文件:prototypes.entity.entities2.在“prototypes.entity.entities”文件中,找到集装机械臂(stack-inserter)和集装筛选机械臂(stack-filter-inserter),其中有两个速度,一个是抓取速度(extension_speed),一个是旋转速度(rotation_speed)。3.修改抓取速度就行。2023-07-29 19:13:091
图文并茂,揭秘 Spring 的 Bean 的加载过程
目录 Spring 作为 Ioc 框架,实现了依赖注入,由一个中心化的 Bean 工厂来负责各个 Bean 的实例化和依赖管理。各个 Bean 可以不需要关心各自的复杂的创建过程,达到了很好的解耦效果。 我们对 Spring 的工作流进行一个粗略的概括,主要为两大环节: 我们假设所有的配置和扩展类都已经装载到了 ApplicationContext 中,然后具体的分析一下 Bean 的加载流程。 思考一个问题,抛开 Spring 框架的实现,假设我们手头上已经有一套完整的 Bean Definition Map,然后指定一个 beanName 要进行实例化,需要关心什么?即使我们没有 Spring 框架,也需要了解这两方面的知识: Spring 进行了抽象和封装,使得作用域和依赖关系的配置对开发者透明,我们只需要知道当初在配置里已经明确指定了它的生命周期和依赖了谁,至于是怎么实现的,依赖如何注入,托付给了 Spring 工厂来管理。 Spring 只暴露了很简单的接口给调用者,比如 getBean : 那我们就从 getBean 方法作为入口,去理解 Spring 加载的流程是怎样的,以及内部对创建信息、作用域、依赖关系等等的处理细节。 上面是跟踪了 getBean 的调用链创建的流程图,为了能够很好地理解 Bean 加载流程,省略一些异常、日志和分支处理和一些特殊条件的判断。 从上面的流程图中,可以看到一个 Bean 加载会经历这么几个阶段(用绿色标记): 整个流程最为复杂的是对循环依赖的解决方案,后续会进行重点分析。 而在我们解析完配置后创建的 Map,使用的是 beanName 作为 key。见 DefaultListableBeanFactory: BeanFactory.getBean 中传入的 name,有可能是这几种情况: 为了能够获取到正确的 BeanDefinition,需要先对 name 做一个转换,得到 beanName。 见 AbstractBeanFactory.doGetBean : 如果是 alias name ,在解析阶段,alias name 和 bean name 的映射关系被注册到 SimpleAliasRegistry 中。从该注册器中取到 beanName。见 SimpleAliasRegistry.canonicalName : 如果是 factorybean name ,表示这是个工厂 bean,有携带前缀修饰符 & 的,直接把前缀去掉。见 BeanFactoryUtils.transformedBeanName : 我们从配置文件读取到的 BeanDefinition 是 GenericBeanDefinition 。它的记录了一些当前类声明的属性或构造参数,但是对于父类只用了一个 parentName 来记录。 接下来会发现一个问题,在后续实例化 Bean 的时候,使用的 BeanDefinition 是 RootBeanDefinition 类型而非 GenericBeanDefinition 。这是为什么? 答案很明显,GenericBeanDefinition 在有继承关系的情况下,定义的信息不足: 为了能够正确初始化对象,需要完整的信息才行 。需要递归 合并父类的定义 : 见 AbstractBeanFactory.doGetBean : 在判断 parentName 存在的情况下,说明存在父类定义,启动合并。如果父类还有父类怎么办?递归调用,继续合并。 见 AbstractBeanFactory.getMergedBeanDefinition 方法: 每次合并完父类定义后,都会调用 RootBeanDefinition.overrideFrom 对父类的定义进行覆盖,获取到当前类能够正确实例化的 全量信息 。 什么是循环依赖? 举个例子,这里有三个类 A、B、C,然后 A 关联 B,B 关联 C,C 又关联 A,这就形成了一个循环依赖。如果是方法调用是不算循环依赖的,循环依赖必须要持有引用。 循环依赖根据注入的时机分成两种类型: 如果是构造器循环依赖,本质上是无法解决的 。比如我们准调用 A 的构造器,发现依赖 B,于是去调用 B 的构造器进行实例化,发现又依赖 C,于是调用 C 的构造器去初始化,结果依赖 A,整个形成一个死结,导致 A 无法创建。 如果是设值循环依赖,Spring 框架只支持单例下的设值循环依赖 。Spring 通过对还在创建过程中的单例,缓存并提前暴露该单例,使得其他实例可以引用该依赖。 Spring 不支持原型模式的任何循环依赖 。检测到循环依赖会直接抛出 BeanCurrentlyInCreationException 异常。 使用了一个 ThreadLocal 变量 prototypesCurrentlyInCreation 来记录当前线程正在创建中的 Bean 对象,见 AbtractBeanFactory#prototypesCurrentlyInCreation : 在 Bean 创建前进行记录,在 Bean 创建后删除记录。见 AbstractBeanFactory.doGetBean : 见 AbtractBeanFactory.beforePrototypeCreation 的记录操作: 见 AbtractBeanFactory.beforePrototypeCreation 的删除操作: 为了节省内存空间,在单个元素时 prototypesCurrentlyInCreation 只记录 String 对象,在多个依赖元素后改用 Set 集合。这里是 Spring 使用的一个节约内存的小技巧。 了解了记录的写入和删除过程好了,再来看看读取以及判断循环的方式。这里要分两种情况讨论。 这两个地方的实现略有不同。 如果是构造函数依赖的,比如 A 的构造函数依赖了 B,会有这样的情况。实例化 A 的阶段中,匹配到要使用的构造函数,发现构造函数有参数 B,会使用 BeanDefinitionValueResolver 来检索 B 的实例。见 BeanDefinitionValueResolver.resolveReference : 我们发现这里继续调用 beanFactory.getBean 去加载 B。 如果是设值循环依赖的的,比如我们这里不提供构造函数,并且使用了 @Autowire 的方式注解依赖(还有其他方式不举例了): 加载过程中,找到无参数构造函数,不需要检索构造参数的引用,实例化成功。接着执行下去,进入到属性填充阶段 AbtractBeanFactory.populateBean ,在这里会进行 B 的依赖注入。 为了能够获取到 B 的实例化后的引用,最终会通过检索类 DependencyDescriptor 中去把依赖读取出来,见 DependencyDescriptor.resolveCandidate : 发现 beanFactory.getBean 方法又被调用到了。 在这里,两种循环依赖达成了同一 。无论是构造函数的循环依赖还是设置循环依赖,在需要注入依赖的对象时,会继续调用 beanFactory.getBean 去加载对象,形成一个递归操作。 而每次调用 beanFactory.getBean 进行实例化前后,都使用了 prototypesCurrentlyInCreation 这个变量做记录。按照这里的思路走,整体效果等同于 建立依赖对象的构造链 。 prototypesCurrentlyInCreation 中的值的变化如下: 调用判定的地方在 AbstractBeanFactory.doGetBean 中,所有对象的实例化均会从这里启动。 判定的实现方法为 AbstractBeanFactory.isPrototypeCurrentlyInCreation : 所以在原型模式下,构造函数循环依赖和设值循环依赖,本质上使用同一种方式检测出来。Spring 无法解决,直接抛出 BeanCurrentlyInCreationException 异常。 Spring 也不支持单例模式的构造循环依赖 。检测到构造循环依赖也会抛出 BeanCurrentlyInCreationException 异常。 和原型模式相似,单例模式也用了一个数据结构来记录正在创建中的 beanName。见 DefaultSingletonBeanRegistry : 会在创建前进行记录,创建化后删除记录。 见 DefaultSingletonBeanRegistry.getSingleton 记录和判定的方式见 DefaultSingletonBeanRegistry.beforeSingletonCreation : 这里会尝试往 singletonsCurrentlyInCreation 记录当前实例化的 bean。我们知道 singletonsCurrentlyInCreation 的数据结构是 Set,是不允许重复元素的, 所以一旦前面记录了,这里的 add 操作将会返回失败 。 比如加载 A 的单例,和原型模式类似,单例模式也会调用匹配到要使用的构造函数,发现构造函数有参数 B,然后使用 BeanDefinitionValueResolver 来检索 B 的实例,根据上面的分析,继续调用 beanFactory.getBean 方法。 所以拿 A,B,C 的例子来举例 singletonsCurrentlyInCreation 的变化,这里可以看到和原型模式的循环依赖判断方式的算法是一样: 单例模式下,构造函数的循环依赖无法解决,但设值循环依赖是可以解决的 。 这里有一个重要的设计: 提前暴露创建中的单例 。 我们理解一下为什么要这么做。 还是拿上面的 A、B、C 的的设值依赖做分析, => 1. A 创建 -> A 构造完成,开始注入属性,发现依赖 B,启动 B 的实例化 => 2. B 创建 -> B 构造完成,开始注入属性,发现依赖 C,启动 C 的实例化 => 3. C 创建 -> C 构造完成,开始注入属性,发现依赖 A 重点来了,在我们的阶段 1中, A 已经构造完成,Bean 对象在堆中也分配好内存了,即使后续往 A 中填充属性(比如填充依赖的 B 对象),也不会修改到 A 的引用地址。 所以,这个时候是否可以 提前拿 A 实例的引用来先注入到 C ,去完成 C 的实例化,于是流程变成这样。 => 3. C 创建 -> C 构造完成,开始注入依赖,发现依赖 A,发现 A 已经构造完成,直接引用,完成 C 的实例化。 => 4. C 完成实例化后,B 注入 C 也完成实例化,A 注入 B 也完成实例化。 这就是 Spring 解决单例模式设值循环依赖应用的技巧。流程图为: 为了能够实现单例的提前暴露。Spring 使用了三级缓存,见 DefaultSingletonBeanRegistry : 这三个缓存的区别如下: 从 getBean("a") 开始,添加的 SingletonFactory 具体实现如下: 可以看到如果使用该 SingletonFactory 获取实例,使用的是 getEarlyBeanReference 方法,返回一个未初始化的引用。 读取缓存的地方见 DefaultSingletonBeanRegistry : 先尝试从 singletonObjects 和 singletonFactory 读取,没有数据,然后尝试 singletonFactories 读取 singletonFactory,执行 getEarlyBeanReference 获取到引用后,存储到 earlySingletonObjects 中。 这个 earlySingletonObjects 的好处是,如果此时又有其他地方尝试获取未初始化的单例,可以从 earlySingletonObjects 直接取出而不需要再调用 getEarlyBeanReference 。 从流程图上看,实际上注入 C 的 A 实例,还在填充属性阶段,并没有完全地初始化。等递归回溯回去,A 顺利拿到依赖 B,才会真实地完成 A 的加载。 获取到完整的 RootBeanDefintion 后,就可以拿这份定义信息来实例具体的 Bean。 具体实例创建见 AbstractAutowireCapableBeanFactory.createBeanInstance ,返回 Bean 的包装类 BeanWrapper,一共有三种策略: 使用工厂方法创建,会先使用 getBean 获取工厂类,然后通过参数找到匹配的工厂方法,调用实例化方法实现实例化,具体见 ConstructorResolver.instantiateUsingFactoryMethod : 使用有参构造函数创建,整个过程比较复杂,涉及到参数和构造器的匹配。为了找到匹配的构造器,Spring 花了大量的工作,见 ConstructorResolver.autowireConstructor : 使用无参构造函数创建是最简单的方式,见 AbstractAutowireCapableBeanFactory.instantiateBean : 我们发现这三个实例化方式,最后都会走 getInstantiationStrategy().instantiate(...) ,见实现类 SimpleInstantiationStrategy.instantiate : 虽然拿到了构造函数,并没有立即实例化。因为用户使用了 replace 和 lookup 的配置方法,用到了动态代理加入对应的逻辑。如果没有的话,直接使用反射来创建实例。 创建实例后,就可以开始注入属性和初始化等操作。 但这里的 Bean 还不是最终的 Bean。返回给调用方使用时,如果是 FactoryBean 的话需要使用 getObject 方法来创建实例。见 AbstractBeanFactory.getObjectFromBeanInstance ,会执行到 doGetObjectFromFactoryBean : 实例创建完后开始进行属性的注入,如果涉及到外部依赖的实例,会自动检索并关联到该当前实例。 Ioc 思想体现出来了。正是有了这一步操作,Spring 降低了各个类之间的耦合。 属性填充的入口方法在 AbstractAutowireCapableBeanFactory.populateBean 。 可以看到主要的处理环节有: 如果我们的 Bean 需要容器的一些资源该怎么办?比如需要获取到 BeanFactory、ApplicationContext 等等。 Spring 提供了 Aware 系列接口来解决这个问题。比如有这样的 Aware: Spring 在初始化阶段,如果判断 Bean 实现了这几个接口之一,就会往 Bean 中注入它关心的资源。 见 AbstractAutowireCapableBeanFactory.invokeAwareMethos : 在 Bean 的初始化前或者初始化后,我们如果需要进行一些增强操作怎么办? 这些增强操作比如打日志、做校验、属性修改、耗时检测等等。Spring 框架提供了 BeanPostProcessor 来达成这个目标。比如我们使用注解 @Autowire 来声明依赖,就是使用 AutowiredAnnotationBeanPostProcessor 来实现依赖的查询和注入的。接口定义如下: 实现该接口的 Bean 都会被 Spring 注册到 beanPostProcessors 中, 见 AbstractBeanFactory : 只要 Bean 实现了 BeanPostProcessor 接口,加载的时候会被 Spring 自动识别这些 Bean,自动注册,非常方便。 然后在 Bean 实例化前后,Spring 会去调用我们已经注册的 beanPostProcessors 把处理器都执行一遍。 这里使用了责任链模式,Bean 会在处理器链中进行传递和处理。当我们调用 BeanFactory.getBean 的后,执行到 Bean 的初始化方法 AbstractAutowireCapableBeanFactory.initializeBean 会启动这些处理器。 自定义初始化有两种方式可以选择: 见 AbstractAutowireCapableBeanFactory.invokeInitMethods : Bean 已经加载完毕,属性也填充好了,初始化也完成了。 在返回给调用者之前,还留有一个机会对 Bean 实例进行类型的转换。见 AbstractBeanFactory.doGetBean : 抛开一些细节处理和扩展功能,一个 Bean 的创建过程无非是: 获取完整定义 -> 实例化 -> 依赖注入 -> 初始化 -> 类型转换。 作为一个完善的框架,Spring 需要考虑到各种可能性,还需要考虑到接入的扩展性。 所以有了复杂的循环依赖的解决,复杂的有参数构造器的匹配过程,有了 BeanPostProcessor 来对实例化或初始化的 Bean 进行扩展修改。 先有个整体设计的思维,再逐步击破针对这些特殊场景的设计,整个 Bean 加载流程迎刃而解。2023-07-29 19:13:161
preproduction是什么意思
preproduction英[pri:pru0259"du028cku0283u0259n]美[u02ccpri:pru0259"du028cku0283u0259n]adj. 生产前的;试制的;试生产的;预制造的[例句]The delta e-4 coupe , like all preproduction prototypes , still needs work.deltae-4跑车和其他所有的试制样车一样还有很多问题要解决。2023-07-29 19:13:242
异星工厂汉化版秘籍
随着我的世界、魔方世界等游戏的走红,各式各样的独立游戏也相继登上舞台。下面深空高玩要给大家介绍的异星工厂,同样也是一款独立游戏。说起异星工厂这个名字,可能还不是有很多人知晓,这是一款由slpwnd团队制作的挖矿+生成+策略的创意综合小游戏,而且汉化组们也已经对于这款游戏汉化成功,所以大家也不用担心玩家玩不懂这款游戏。下面是异星工厂汉化版的秘籍,希望大家喜欢。异星工厂汉化版秘籍:一、采矿机Factoriodataaseprototypesentitydemo-mining-drill.lua 采矿机文件两种钻头 第一个basic-mining-drill是用电钻头,name = burner-mining-drill火钻头,烧煤的那种。max_health = 100, 生命值mining_speed = 采矿速度 数值越高采矿速度越快energy_usage = 数值越小采矿耗费的能源越少resource_searching_radius = 采矿范围 数值越大采矿范围越大二、石头熔炉Factoriodataaseprototypesentitydemo-entities.luaname = stone-furnace 石头熔炉smelting_energy_consumption = 功率 数值越小消耗燃料越少smelting_speed = 熔炼速度 数值越大速度越快三、升级少用药瓶方法Factoriodataaseprototypes echnology echnology.lua 为升级科技所需药瓶,将所有count 数量,修改为1 则所有升级所需药瓶数量为1需新建游戏,不支持存档四、修改物品堆叠数Factoriodataaseprototypesitemdemo-item.lua 文件stack_size 值为堆叠数,修改随意以上异星工厂汉化版修改秘籍中涉及到的游戏文件,均可以在安装目录下找到,大家使用编辑器打开就可以了,建议大家在修改之前一定要做好备份工作。异星工厂(Factorio)官方中文破解版v1.1.592023-07-29 19:13:421
【混合数据聚类分析】 聚类分析数据
种混合属性数据的聚类算法 摘 要: 提出一种基于属性分解的随机分组的改进方法,以提高聚类算法的稳定性和适用性。实验仿真结果表明,改进算法具有很好的稳定性和应用性。 关键词: 聚类;混合数据;分类属性 所谓聚类,就是将物理或抽象对象的集合构成为由类似的对象组成多个类或簇的过程。由聚类所生成的簇是一组数据对象的集合,同一簇中的数据对象尽可能相似,不同簇中的数据对象尽可能相异[1]。聚类算法在许多领域获得了广泛应用[2],但是,由于在实际应用中,许多数据集不仅包含数值属性的数据,同时也包含如地图颜色、几何纹理等分类属性的数据。因此使得基于传统的欧式距离划分的聚类算法难以适用于混合属性数据集的要求。为此各研究学者就此问题进行了深入地研究和探讨。 MacQueen 所提出的k-means 方法[3]是最早、也是最简单的聚类方法,但是该方法只能对数值属性的对象集进行聚类,无法对分类属性和混合型属性的对象集进行聚类。Huang 提出的k-modes 算法和k-prototypes 算法[4]推广了k-means 方法,使之可以对分类属性和混合型属性的数据集进行聚类。同时陈宁、陈安、周龙骧进一步提出了模糊k-prototypes 算法,并利用引进模糊聚类算法来提高聚类结果的准确性[5]。 上述方法在聚类过程中,均利用分类型属性简单匹配相异度,将分类型属性的数据转化为数值型属性数据间的基于距离的计算问题,从而解决了对混合属性数据集的聚类问题。但是上述方法在对分类属性数据和混合型属性数据进行聚类时,总会存在一些如聚类结果的随机性和不稳定性等缺点,甚至有时会出现空聚类[6-7]现象。 为此,本文在k-prototypes 算法的基础上进行改进,利用随机分组的思想动态地选取初始原型点,同时对分类属性数据采取属性分解的方法进行处理,从而提高算法的稳定性和适用性,使聚类结果更加理想化。 1 相关观念 聚类是将数据对象分成类或簇的过程,使同一个簇中的对象之间具有很高的相似度,而不同簇中的对象高度相异[2]。其中对象间的相异度度量用来表示对象间的相异程度,代价函数用来表示对象间的相似程度。 2 算法的改进 k-modes 算法和k-prototypes 算法在聚类混合属性数据时,对初值有明显的依赖,导致聚类结果不理想,甚至出现聚类空集的现象。因此本文在原有算法的基础上进一步改进,利用随机分组确定初始原型的方法,然后对随机分组得到的初始原型进一步加工处理,使得聚类结果对初值的依赖性有所降低,从而使聚类结果更合理、稳定,达到改进算法的目的。 2.1 分类属性处理算法 假定数据对象x 是具有m 维属性的数据对象,其中含有m1个数值型数据和m2个分类型属性。那么,可以直观地将数据对象x 看成分别有m1维数值属性和m2维分类属性组成,其中m2维分类属性又可以分别看成由多维数据值组成。例如:表2中的分类型属性“渠道”可以看成是由“直接”、“间接”2维分类数据值组成的;分类型属性“语义范畴”可以看成是由“植物”、“语言”2维分类数据组成的。在计算中,分别将分类型属性看成是由多维的分类属性数据值组成的。 对象1的分解原型表示为: 1={2,{0(直接) ,1(间接)},{1(植物) ,0(语言)}}; 对象2的分解原型表示为: 2={2,{1(直接) ,0(间接)},{0(植物) ,1(语言)}}; 对象3的分解原型表示为: 3={3,{1(直接) ,0(间接)},{1(植物) ,0(语言)}}; 对象4的分解原型表示为: 4={3,{0(直接) ,1(间接)},{1(植物) ,0(语言)}}; 对象5的原型表示为: 5={2,{1(直接) ,0(间接)},{0(植物) ,1(语言)}}; 则对象1,2,5组成的聚类Q1的分解原型可以表示为: Q1={2,{2/3(直接) ,1/3(间接)},{0(植物) ,3/3(语言)}}; 则对象3,4组成的聚类Q2的分解原型可以表示为: Q2={2,{1/2(直接) ,1/2(间接)},{2/2(植物) ,0(语言)}}; 然后利用式(2)计算对象与聚类之间的距离,得到其中的最小距离。通过这种方式,可以有效地避免在分类属性中出现频率少的属性值丢失的现象,从而得到更合理的聚类的结果。 2.2 随机分组算法 随机分组算法的基本原理是依据需要聚类的个数k 和数据集中所包含数据的个数n 。将总数为n 的数据集划分为count=n/k组,然后从count 组中分别选择数据对象k 次,构成k 个聚类的初始原型值。 算法流程: (1)分组数据集。已知数据集X={x1,x2,…,xn}是包含n 个数据对象的集合。依据数据集中数据个数n 和需要聚类的个数k ,将整个数据集分组成为count=n/k组,即数据集X={[x1,x2,…,xk],[xk+1,…,x2k],…}。如果分组后数据集中还有剩余的对象未分配,则将剩余的对象分配到任意组中,本文选择将其分配到第一个分组中。 (2)随机获得一个初始点。将数据集分组成为子数据集后,依次从count 个子数据集中随机选择一个数据对象,形成由count 个数据对象组成的新的子数据集。将这个新的子数据集中的所有m1个数值型属性中的值利用式(5)计算平均值作为初始点的对应的数值型属性的值,对于分类型属性的值,则利用2.1节的分类属性数据处理方法进行处理后作为初始值的对应分类型属性的值。 3) 重复步骤(2)k次,得到k 个初始点,作为聚类分析的k 个原型点。 2.3 聚类算法描述 改进算法的流程和k-prototypes 算法的流程基本相同。具体算法描述如下: (1)将数据集中的每一个数据对象按照2.1节中的分类属性数据值的处理方法进行处理。 (2)利用随机分组算法获得k 个初始原型点,每一个初始原型点对应一个聚类原型初值。 (3)将数据集中剩下的任一个对象分配给一个聚类,根据相异度度量的距离公式计算的结果确定一个聚类的原型与它最近,分配给该聚类后,将聚类的原型更新。 4) 在所有的数据对象全部分配给聚类之后,重新计算该数据对象与当前每一个聚类之间的距离。如果发现一个数据对象它的最近原型属于另一个聚类而不是当前的聚类,将该数据对象重新分配给另一个聚类并更新两个聚类的原型。 (5)重复算法(4),直到数据集中的所有数据对象再没有对象变更聚类为止。 3 实验分析 一般评价聚类结果均是采用“误分率”等统计方法。在本文的仿真实验中,通过将本文的改进算法和k-prototypes 算法进行比较,采用错误的分类数目来评价聚类算法性能。错误的分类数目,即对算法的聚类结果和数据集本身进行比较,聚类结果中没有被正确分配到相应聚类的数据对象的数目。本文通过两个数据集进行实验。 (1)采用UCI 数据集中的abalone 数据集进行测试。该数据集包括涉及生活领域的8个类别的4 177个数据对象,其中含有1个分类型属性,1个整数型属性和6个实数型属性。分类属性数据对象中含有1 528个记录为F(父) 值,1 307个记录为M(母) 值,还有1 342个记录为I(未成年人) 值。 如图1所示,在改变聚类个数的情况下,通过比较两种算法的聚类结果的错误分类数目可知,改进算法在一定程度上比原有算法的稳定性更高。 (2)采用UCI 数据集中的post-operative patient数据集。该数据集中还有涉及生活领域的9个类别的90个数据对象,其中还有8个分类属性和1个整数型属性,包含有2个记录为I(病人送加护病房) ,24个对象为S(病人准备回家) ,64个对象为A(病人送去普通病房) 。 由图2可知,在分类属性较多的混合属性数据集中,改进算法的稳定性仍在一定程度上优于原型算法,保证了改进算法对于混合属性数据聚类结果的稳定性和有效性。 对于数值型数据和分类型数据的混合数值的聚类,目前虽然有一些算法,如k-modes 算法和k-prototypes 算法。但是这些算法在选择聚类初始点时过于随机,导致聚类结果不理想。因此本文提出了一种基于分类属性数据分解的随机分组选择初始原型的改进算法。但是在本文的改进算法中,仍然存在一些缺点,例如,聚类个数仍是人为确定,不能动态确定适合数据集合理的聚类的个数。因此,为了使改进算法的适应性和稳定性更好,同时使数据集的聚类结果与输入数据对象的顺序无关,动态确定聚类合理的聚类个数是今后的研究重点。 参考文献 [1] 王欣,徐腾飞,唐连章,等.SQL Server2005数据挖掘实例分析[M].北京,中国水利水电出版社,2008. [2] Han Jiawei, KAMBER M. Data mining concepts and techniques[M]. 北京:机械工业出版社,2001. [3] CHRISTOPHER J, BURGES C. A tutorial on support vector machines for pattern recognition[J]. Data Mining and knowledge Discovery, 1998: 2(2): 121-167. [4] VAPNIK V N. An overview of statistical learning theory[J]. IEEE Trans on Neural Network , 1999; 10(5):988-999. [5] 张文生,王珏. 利用支持向量机构造函数型连接网络的研究[J].计算机科学,2001,28(5):172-177. [6] 赵立江,黄永青. 混合属性数据聚类初始点选择的改进[J].广西师范大学学报:自然科学报,2007,25(4):102-105. [7] 林培俊,王宇. 对类属性和混合属性数据聚类的一种有效地算法[J].计算机工程与应用,2004,40(1):190-191.2023-07-29 19:13:501
心理学笔记:7,人类对事物认知的概念是天生的还是从后天形成的?
哲学上自古就有一个大问题:我是谁?从哪里来?到哪里去?这个问题太过玄虚,哲学思辨了几千年,仍然没有定论。 如果从我们自己周围的世界来看,我们周围教的起名字的事物为什么是这个名字,而不是别的名字?比如,为什么鞋子叫鞋子?鸟叫鸟?为什么椅子叫椅子? 那些研究这类问题的行为科学家(behavioral scientists),把重点集中在认知(cognition, human thinking)和感知(perception, human"s interpretation of the world around them)。 人类认识和感知自己周围的世界事物,是通过概念(concepts)把周围的事物进行归类。 ①概念就是让你把你周围的事物进行分类归类经验的心理表征(mental representations),比如家具、蔬菜、动物、职业、鞋子、鸟类等,归类的事物都因为具有相同的特征,才被分为一类。物以类聚,人以群分。 概念对人类特别有用处,就是因为人们可以通过概念,把周围事物的信息进行归类处理。比如,看见一个椅子,你就把它归为椅子一类。即使千差万别,你也可以根据一些共性,把它们归类为椅子。 那么,概念中的椅子有什么共性呢?有腿支撑,有平面可以坐,有背架可以依靠。即使一些躺椅、摇椅(recliners and rocking chairs)不太符合上面的共性,仍可以归类为椅子。 ②认知心理学家的问题是:人的大脑对于物体的概念分类,是从哪里什么时候形成的? 一直到上世纪70年代,传统认知科学认为分类(category)来自于我们所使用的语言。换句话说,事物分类之所以存在,是因为我们语言理由可以表达词汇。 比如,我们有一类动物可以下蛋,会飞,有羽毛,经常叽叽喳喳地叫,不用说也知道这种动物叫鸟。传统认知科学家认为,如果我们语言里没有鸟这个词汇,我们就不会有鸟的概念,或者对鸟的分类。 从这里推理,因为世界上大约有6000多种语言在使用,在不同语言里,因为传承和生活环境迥异,对于概念和归类应该是大相径庭的。 当然,也有一些人类共有的词语:比如妈妈,爸爸,奶奶等,似乎多种语言里的发音都近似。 又比如,爱斯基摩人或者因纽特人,因为一只面对的是冰雪世界,所以对雪的感知认知自然大为丰富。因纽特人语言中关于雪的词汇有12个之多,而英语里好像就只有一两个(snow)。 许多年以来,关于事物概念分类的本源被心理学家、社会学家、人类学家和语言学家认为来自于语言的理论,是占统治地位的。 上世纪70年代,美国加利福尼亚伯克利大学的教授埃莉诺.洛施(Eleanor Rosch),基于自己的心理学实验,发表了革命性的研究报告,挑战这种传统理论观点。 她的研究认为,人类大脑关于事物概念分类的能力,不一定必须来源于语言,而是存在于人们本来就存在的生理能力中。一句话,基本概念分类的认知能力,可能是天生就有的。 如果说人们出生伊始基本概念分类认知能力是一张白纸,那么,所有同类物体的分类认知能力应该是等同的。 在现实世界里,洛施注意到人们对于一些事物的分类认知能力,对同一类别的事物中有的成员的认知能力要明显好于另外一些事物。 比如,关于鸟类。一想到鸟类,你的脑海里可能就蹦出一个燕子的图画,或者是老鹰,或者是麻雀;你不一定立即想到难以见到的企鹅,大鹅,或者鸡。 因为在你的脑海里,有一个标准典型的鸟类模型(Prototype, ideal example),像燕子能飞、有羽毛翅膀,筑窝,下蛋等。 落实的观点论辩,我们的大脑心理分类界限是不清晰的,我们判定企鹅和鸡是不是鸟,需要和我们脑海中典型的鸟进行比较(prototypes)。她相信这种基本事物的标准原型,就烙印在我们的基因里,是与生俱来就有的。不是后天通过语言学习,才拥有的。 洛施在上世纪60年代,旅行中发现了一个完美的实验标本群落,新几内亚的丹尼人(New Guinea, Dani population, Stone Age)。由于与世隔绝,丹尼人仍然使用是石器时代的文化和语言,这种原始语言中,几乎没有现代的一些概念。 洛施的心理学概念认知研究,就是关于人们常见的色彩的分类。大家知道,英语里有11个色彩分类:红、黄、绿、蓝、黑、灰、白、紫、橙、粉红、和棕色。 人们对于每种色彩有一个焦点色彩(focal color),比如想到红色就会想到火红,就是红色的焦点红、或者典型红,人们在识别焦点火红的时候,比其它同类的红色或者非红色彩,就是识别速度要快得多。 而新几内亚的丹尼人呢,对于色彩只有两个类别:mili, 描述黑、冷(black and cool);mola, 描述光和热(light and warm)。洛施因此推论,如果传统的概念分类认知理论正确,即认为概念分类认知能力来自于语言;那么,丹尼人就应该只有两种色彩概念分类。 为了检验是否正确,洛施决定教丹尼人学习识别英文色彩分类概念:教他们8种焦点色彩(focal colors), 和8种非焦点色彩(non focal colors)。如果洛施的假设成立,如果色彩概念分类的能力是天生的,语言水平仍然停留在石器时代的丹尼人,不可能从语言中后天学习掌握色彩分类,因为他们的语言里只有两种黑和光。他们学习8种焦点色彩的速度应该比非焦点色彩的速度要快,因为假设基因里就烙刻有焦点色彩分类概念。 洛施选择参与实验的丹尼人年龄位于12-15岁,每组12名男性,都首先通过测试确定不是色盲,也首先在参与实验前都确定他们对于色彩的概念分类就是只有黑(mili)和光(light)。 ①使用油漆店常用的色卡(color chips),代表特殊色彩的波长。 第一组使用焦点色彩来进行学习测试,粉红、红、黄、橙色、棕色、绿色、蓝色和紫色。 另一组使用再焦点色彩之间的颜色色卡,来进行学习测试。比如红棕色、黄绿色,这些色彩称之为非焦点色彩。(non focal colors) ②测试的过程 在小心翼翼地尽量规避开一些影响测试结果的人为因素后,对丹尼人的实验开始进行。每组丹尼人被告知,他们将会参与一项任务,有老师教给他们一门新的语言。在第一天,研究者分别把各组的色彩交给实验参与者,并且让他们重复巩固记忆。然后,打乱洗牌后,重新进行。每次,参与者把色彩说正确就给予奖励,如果说错了,就告诉他们正确的色彩名字。 经过5-12天后,再来测验学习成果。在结束学习阶段的时候,进行所有参与者都参加的综合测试,来验证参与者是不是掌握了新的色彩语言识别分类能力,以及在新的环境条件下的使用能力(transfer abilities),或者是只在原来的学习条件下掌握了。 ③实验结果 焦点色彩学习者的错误率在学习期间是8.54;而非焦点色彩学习者的错误率是18.96;这样的差距还是非常明显的。 在实验色彩学习期间,焦点色彩那一组基本上用了5天时间,就完全掌握了8种焦点色彩概念分类;而非焦点色彩那一组,用了12天才基本掌握。 另外,在实验学习过程中,有4个非焦点色彩学习组的参与者,感到学习困难挫折感强,几乎要退出实验。实验研究者,费了好大的劲,才劝说他们坚持下来。这种烙刻在基因密码里的事物概念分类,洛施称之为自然概念分类(natural categories)。 一旦我们对于某一种概念熟悉,变成我们自己的自然归类(natural category),在我们脑海里形成一个标准的认知概念模型,我们再遇到同样的事物的时候,就会自然归类,然后与我们认知的标准模型进行比较。 这也是为什么,有经验的医学专家,可以用几秒钟的时间,就可以准确断定X片上的患者得了什么重病,准确率非常高。 1,洛施的后续研究 在洛施的后续研究中,她指出人类大脑中的自然事物概念分类,如果用严格的语言来表述物体的时候,是没有严格、清晰、特别的一成不变的界限的。这种(natural categories)自然分类概念虽然与生俱来,但是随环境变化因人而异发展。 比如,如果定义鸟类共同的特征是:能飞、有翅膀、会叫、在树上生活的话,喜鹊完全符合,但是燕子就不是在树上筑巢,而往往是在屋檐下。 蝙蝠算不算是鸟呢?蝙蝠能飞,有翅膀,也能叫,但是有人认为蝙蝠不是鸟,淡然也有的人认为是。 因此,洛施认为我们对于周围事物的概念分类模板的形成,也是在运用基本模板,然后不断发展形成的过程。 2,最新的心理学实验应用 洛施的方法比较苛刻,一是世上再难寻类似丹尼人这样与世隔绝的部落,可以作为样本研究;二是研究费时长,费力,难以进行。现在有三种较为简易的实验方法: ①在实验中通过让实验参与者进行询问打分的方式,(1-10),来分析一个物体,与你的标准模板匹配程度。 比如说到狗的概念,典型的德国牧羊犬,可能大部分人给的分值为10;而如果是一只法国斗牛犬(French bulldog),可能你的分值就只有3,因为不符合你关于狗的的典型模板。 ②第二种方法,更为简单,是通过听一段话用按钮来说明对或者错,用按按钮的速度来显示,你对于听到的事物的熟悉程度。 比如,听到一只火鸡是一只鸟,你的反应速度以及准确率,就反映了你把听到的事物与心智模型比较之后,认为的匹配程度。 事物与你的标准模板越匹配,你的反应速度也越快。 ③第三个简单的方法,就是让参与者对事物列表归类,或者划线连接。 比如说,说到家具的时候,你可能快速将椅子、桌子、橱子、沙发归类,小储藏箱、书橱、公文包一类的可能就排在后面。 如果你提问哪些是人类情感的时候,你可能快速将幸福、愤怒、焦虑等常见的七情六欲连接在一起,那些混淆和怒火之类的,可能就慢一些。 归类快的,有可能就是你的焦点分类概念,归类慢的、需要思考再确定的,可能就是你的非焦点归类概念。 3,洛施的实验结果一种有科学家在挑战,提出疑问 一些科学家通过在巴布亚的(Papua)2010年的实证研究发现,通过类似洛施的试验方法和人群,但是得出了相反的结论。人们学习掌握概念分类,是通过语言来得到的。 孰对孰错?也许真相就在于当需要准确描述事物概念定义的水平的时候,就会激发语言来进行定义,用语言来描述出来。2023-07-29 19:13:571
雷诺汽车英文保密协议烦请高手翻译
任何雷诺的子公司中,雷诺的SAS和/或雷诺汽车公司至少举行直接或间接,有兴趣的比例百分之五十( 50 % )的资本,以及日产汽车公司2023-07-29 19:14:051
求PB大神解释一下下面一段话,具体是什么意思,写这个的目的是什么?这些代码需要写在哪?
这是一个自定义对象uo_get_exename的source文件内容,这个对象中包含一个名为s_process的结构和一个名为of_getexe的函数,三个名为CreateToolhelp32Snapshot、Process32First、Process32Next的外部函数。你可以新建一个同名的自定义对象,然后在edit source编辑模式下将这段代码覆盖到里面,然后就可以在编辑模式下查看这个对象。2023-07-29 19:14:161
舒马赫是哪国人
德国人2023-07-29 19:14:2515
跪求英语作文,介绍平面设计这个专业的。
There are several phases and processes in the user interface design some of which are more demanded upon than others depending on the project. (note for the remainder of this section the word system is used to denote any project whether it is a web site, application, or device)Functionality requirements gathering - assembling a list of the functionality required of the system to accomplish the goals of the project and the potential needs of the users. User analysis - analysis of the potential users of the system either through discussion with people who work with the users and/or the potential users themselves. Typical questions involve: What would the user want the system to do? How would the system fit in with the users normal workflow or daily activities? How technically savvy is the user and what similar systems does the user already use? What interface look & feel styles appeal to the user? Information architecture - development of the process and/or information flow of the system (i.e. for phone tree systems, this would be an option tree flowchart and for web sites this would be a site flow that shows the hierarchy of the pages).Prototyping - development of wireframes, either in the form of paper prototypes or simple interactive screens. These prototypes are stripped of all look & feel elements and most content in order to concentrate on the interface. Usability testing - testing of the prototypes on an actual user—often using a technique called talk aloud protocol where you ask the user to talk about their thoughts during the experience. Graphic Interface design - actual look & feel design of the final graphical user interface (GUI.) It may be based on the findings developed during the usability testing if usability is unpredictable, or based on communication objectives and styles that would appeal to the user2023-07-29 19:14:501
centos 7.4 MariaDB python3.6 安装mysqlclient 报错 ld: cannot find -lmariadb 怎么修复?
yum install mariadb-libsyum install MariaDB-shared执行这个可以解决 ld: cannot find -lmariadb。2023-07-29 19:15:091
求翻译,机器翻译请绕道。。
苏州概况1. 地理位置苏州是一座历史文化名城和重要的风景旅游城市,是中国经济最发达的长江三角洲地区的重要中心城市之一。她位于江苏省东南部,东临上海,南接浙江。苏州地处温带,属亚热带季风海洋性气候,四季分明,气候温和,雨量充沛,全市地势低平,平原占总面积的 55% ,水网密布,土地肥沃,物产丰富。素有 " 人间天堂 " 和 " 鱼米之乡 " 的美誉。2. 行政区划和人口全市面积 8488 平方公里,其中市区面积 1650 平方公里。 2006 年末全市户籍总人口 615.55 万人,其中市区人口 229.75 万人。苏州市下辖七区五市 : 苏州工业园区、苏州国家高新技术产业开发区、吴中区、相城区、沧浪区、平江区、金阊区、常熟市、昆山市、张家港市、吴江市、太仓市。3. 苏州总体情况2006 年,苏州全市完成地区生产总值 4820.26 亿元,比上年增长 15.5% 。开放型经济列中国大中城市的前茅:进出口总额列第 3 位;实际利用外资列第 2 位;新增注册外资保持第 1 位。开业外资企业累计达 10218 家,其中, 113 家世界 500 强企业在苏州投资了 349 个项目。二、苏州吸引外资的优势体制优势:率先建立起较为完善的市场管理体制,在工业园区成套借鉴新加坡管理软件。功能优势:具备各种类型的国家级开发区、出口加工区、保税物流园区、省级开发区,沪苏直通口岸海关监管点实行 5+2 工作制。配套优势:门类众多的中小企业,良好的制造业基础,为产品零部件的当地化提供便利,有利于降低成本。区域优势:空港:上海浦东国际机场(距离 130km )上海虹桥机场(距离 86km )南京禄口国际机场(距离 200km )无锡硕放机场(距离 30km )苏州光福机场(距离 10km )港口:上海港(中国最大海港)苏州港(张家港港 + 常熟港 +太仓港)铁路:京沪铁路(北京-上海)规划中的京沪高速铁路、苏南沿江铁路公路:沪宁高速(上海 - 南京)、苏沪高速(苏州 - 上海)、苏嘉杭高速(苏州-杭州)、沿江高速、苏昆太高速、苏州环城高速、沪甬高速、312 国道、 318 国道、 204 国道、苏沪机场路航运:京杭大运河、长江,区域内水网密布人文优势:具有悠久历史文化传统,现代教育发达,各类型学校齐全,能满足企业对各类专门人才的需求。蘇州概要1.场所蘇州は歴史的、文化的な都市であり、重要な観光都市は、都市の重要な中心地、中国で最も経済的に発展した长江デルタ地域の一つです。彼女は东の江蘇省、上海、浙江省南部の南东に位置しています。蘇州は、四季がはっきりし、温暖な気候、豊富な降雨、市内の低地の地形、平野の総面积の55%、水のネットワーク、肥沃な土地、豊富な天然资源と、温帯、亜热帯モンスーン海洋性気候に位置しています。 "地上の楽园"と "たくさんの土地"评判として知られている。行政区画と人口8488平方キロメートル、1650平方キロメートルの面积の都市の市街地。 2006年後半に、615550000、市内の全世帯の人口が、そのうちの229750000の都市人口。蘇州の7地区の管辖下にある5つの都市:蘇州工业园区、蘇州国家ハイテク产业开発区、呉中区、相城区、Changlang区、平江、Jinchang、常熟、昆山、张家港、呉江市、市太仓。。蘇州全体的な状况。2006年、蘇州市は482026000000元、前年比15.5%増加の国内総生产(GDP)を完了した。中国の大规模および中规模の都市で开かれた経済の最前线にカラム:カラム3の総输入と输出量は、外国人投资コラム2の実际の活用、外国投资、新规登録を维持するために。外资系企业にオープンした500社が蘇州で349のプロジェクトに投资していた113フォーチュン含めて、10218円となりました。外国投资を诱致するための第二、蘇州の利点インスティテューショナル·メリット:より完璧な市场管理システムを确立するためには、まずセットは工业団地シンガポールマネジメントソフトウェアから学ぶ。机能的な利点:国家レベルの开発区、输出加工区、保税物流园区、地方开発区、江蘇省、上海の様々なタイプのストレートポート税関は5 2の実现に向けた作业を指す。相补的な利点:制品コンポーネントのローカライズを容易にするために、数多くの分野の中小企业が、优れた制造拠点は、コストを削减するのに役立ちます。地域の优位性:空港:上海浦东国际空港(距离130キロ)上海虹桥空港(距离86キロ)南京禄口国际空港(距离200キロ)Shuofang空港(30キロ)蘇州光复空港(10キロ)ポート:上海港(中国最大の港)蘇州ポート(张家港ポート+熟ポート+太仓港)鉄道:北京 - 上海鉄道(北京 - 上海)计画では北京 - 上海高速鉄道は、长江沿线南部江蘇省ハイウェイ:Huning高速道路(上海 - 南京)、蘇-huの高速(蘇州 - 上海)、Sujiahang(蘇州 - 杭州)、高速、Sukunあまりに道沿线、蘇州环状道路高速Huyong、国道312、国道318 204国道、苏沪空港道路送料:京杭大运河、长江、水のネットワークを介して地域文化的な利点:文化的伝统の长い歴史を持つ、近代的な教育は、専门知识のすべての种类の企业のニーズを満たすために、学校のすべてのタイプを完了、开発しました。请采纳。2023-07-29 19:15:171
英译汉,一段英文论文,看不太懂,请高手帮忙翻译下,不胜感激!
电子商务对新丝路:阿聚宝盆研究OpportunitiesThe的丝绸之路是一个重要的贸易航线,欧洲和亚洲之间的一千年ago.It连接位置在中欧和东欧,那些散落在西部,中部和东部地区。在更近的时候,它一直被忽视的商业,与其他港口和航线的发展。在本文中,潜在的复兴丝绸之路与电子商务进行了讨论。在这个研究项目中,我们描述中国西部(新疆)和中亚(如哈萨克斯坦)在该地区的新兴电子商务研究机会。(财政,后勤和物理基础设施障碍)确定,加上文化和地方经济的担忧。我们的分析一般是积极的,我们预计将会出现一个新的电子丝绸之路兴国生活和本地的economy.In结论,在适当的时候,我们看到了一个电子丝绸之路为看好,但挑战与numerousopportunities研究。许多基础设施很到位,但缺乏应用。该地区的丰富的文化遗产提供了丰富的机会,但还创建了一个持续的文化保护与特殊的敏感性,我们需要协调多个利益相关者(2000年Verbole)的关注和目标。许多额外的考虑在于在陆地,海上和空中的选项的基础上共享信息和电子商务的灵活性之间的权衡的性质。整体而言,我们认为,突出的丝绸之路历史已经重新在全球电子商务的意义。从本质上讲,这是多年的多项目research.Our的努力迄今仅代表电子丝绸之路的第一个步骤下来。扩展大学,企业和政府之间的合作是必要的。这将超越原型(测试床)和行动研究项目的联合小组和讲习班向发展,从而影响电子丝绸之路的成功实施和使用。仅供参考2023-07-29 19:16:102
基于数字温度传感器的数字温度计的汇编语言程序。
用c很简单 ,/********************************FILE NAME: DS18B20.cCHIP TYPE: ATMEGA16CLOCK FREQUENCY: 8MHZIDE: VSMStudioCOMPILER: AVR-GCCTIME: September 2010********************************/#include <avr/io.h>#include <util/delay.h>#define uchar unsigned char#define uint unsigned int#define BUS PORTC// Low level port/pin definitions#define sbit(x,PORT) (PORT) |= (1<<x)#define cbit(x,PORT) (PORT) &= ~(1<<x)#define pin(x,PIN) (PIN) & (1<<x)// Pins definition#define s_digit1 sbit(5,PORTC) #define c_digit1 cbit(5,PORTC)#define s_digit2 sbit(4,PORTC) #define c_digit2 cbit(4,PORTC)#define out PORTC#define DQ_IN DDRA&=~(1<<7)#define DQ_OUT DDRA|=(1<<7)#define S_DQ sbit(7,PORTA)#define C_DQ cbit(7,PORTA)#define DQ pin(7,PINA) // Function Prototypesvoid init_ds18b20(void);uchar readbyte(void);void writecommand(uchar);uchar readtemp(void);uchar a, b, tt;// Main programint main(void) { uchar i=0, temp; // Initialize Stack Pointer SPL=0x54; SPH=0x04; // Configure port pins DDRC = 0xff; DDRA = 0xff; while(1) { temp = readtemp(); for(i=0; i<10; i++) // 10 measures { // output the units out = (temp/10) & 0x0f; s_digit1; c_digit2; _delay_ms(5); // output the tens out = (temp%10) & 0x0f; c_digit1; s_digit2; _delay_ms(5); } } }// Start transaction with 1-wire line. void init_ds18b20(void) { DQ_OUT; C_DQ ; _delay_us(600); S_DQ; _delay_us(50); DQ_IN; while(DQ); _delay_us(240); DQ_OUT; S_DQ; _delay_us(300); }// Read a byte from the sensoruchar readbyte(void) { uchar i = 0,data = 0; DQ_OUT; for (i=0; i<8; i++) { C_DQ ; data >>= 1; _delay_us(3); S_DQ; DQ_IN; _delay_us(12); if(DQ) data |= 0x80; DQ_OUT; S_DQ; _delay_us(45); _delay_us(5); } return(data); }// Write a command to the sensorvoid writecommand(uchar data) { uchar i; for(i=0; i<8; i++) { C_DQ; _delay_us(15); if(data & 0x01) S_DQ; else C_DQ; _delay_us(45); data >>= 1; S_DQ; _delay_us(2); } }// Read value from the sensoruchar readtemp(void) { uint t; init_ds18b20(); // Convert writecommand(0xCC); writecommand(0x44); init_ds18b20(); // Read Scratch memory area writecommand(0xCC); writecommand(0xBE); a = readbyte(); b = readbyte(); t = b; t <<= 8; t = t|a; tt = t*0.0625; return(tt); }2023-07-29 19:16:321
关于滤波器的英文翻译谢谢
不太通顺,不好意思周期结构一般展品通和阻带的特点在各个阶的波数的性质决定的结构。这本来是研究,在案件波的结晶网格结构,但结果是更普遍的。的存在或缺乏宣传波,可确定检查的K - β或ω - β图。为我们的目的,它的足够了解的一般性认为,周期结构引起阶是通过和乐队都已停止。 建设具体的过滤器,我们希望能够与理想的频率特性,以参数的过滤器结构。一般的合成过滤器从表列的收益,低通原型。理想的情况是,我们可以与分布式参数,以相应的参数集总元素的原型。 正如我们将看到,各种形式的过滤器和通阻,才能实现在分布式过滤器,以及在集中元素的过滤器。 多年来,集中元素的过滤器已开发有非最小相位,这就是第二阶段的特点是不是非常确定的振幅的特点。这一技术的许可证,设计过滤器的通讯系统无法建造只用最小相位滤波器的概念。这通常需要之间的耦合多个区段,并可以扩大到分布式过滤器。 设计微波滤波器是全面详细的在著名的斯坦福研究所publication1微波滤波器,阻抗匹配网络与耦合结构。2023-07-29 19:17:061
帮忙看德国机械图纸
Valve saet n.b.Zchg.——可能表示公司Material: 11 S Mn Pb 30 C——表示材料surface: blank, burrfree, clean packed in layers——外观demand each:——商品需求量D表示B-B剖视上小孔的大小!就是在图纸左上角里,共有5种规格Marking——标记的意思2023-07-29 19:17:164
在虚拟机编译运行dpvs
修改:PKG_CONFIG_PATH应该是*.pc所在目录,如下设置即可。 export PKG_CONFIG_PATH=/root/dpvs/dpdk/dpdklib/lib/x86_64-linux-gnu/pkgconfig 修改:安装libnuma-dev即可。apt install libnuma-dev 修改:src/Makefile 中加上 -Wno-address-of-packed-member CFLAGS += -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -Wno-address-of-packed-member -mcmodel=medium 修改:src/Makefile 中加上 -Wno-packed-not-aligned CFLAGS += -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -Wno-address-of-packed-member -Wno-packed-not-aligned -mcmodel=medium 修改:注释掉下面两行 修改:安装 apt-get install libpopt-dev 修改:修改dpip的makefile,添加CFLAGS += $(DEFS) -Wno-address-of-packed-member2023-07-29 19:17:471
pb怎么分割字符串并且放入数组中
global type gf_split_parm from function_objectend typeforward prototypesglobal function integer gf_split_parm (string as_parm, ref string as_data[])end prototypesglobal function integer gf_split_parm (string as_parm, ref string as_data[]);//拆分返回值long ll_pos, ll_itemif isnull(as_parm) then as_parm = ""end ifif len(as_parm) <= 0 then return 0end ifll_item = 0ll_pos = pos(as_parm, ",")do while ll_pos > 0 ll_item ++ as_data[ll_item] = left(as_parm, ll_pos - 1) as_parm = mid(as_parm, ll_pos + 1) ll_pos = pos(as_parm, ",")loopll_item ++as_data[ll_item] = as_parmreturn ll_itemend function2023-07-29 19:17:561
求F1和舒马赫的历史?
他是永远的王者2023-07-29 19:18:054
VB修改注册表值
Private Sub Form_Load() Open "c: eg.reg" For Output As #1 Print #1, "Windows Registry Editor Version 5.00" Print #1, "" Print #1, "[HKEY_CLASSES_ROOTCLSID{871C5380-42A0-1069-A2EA-08002B30309D}shellOpenHomePageCommand]" Print #1, "@" & "=" & "C:Program FilesInternet Exploreriexplore.exe" "@="""C:Program FilesInternet Exploreriexplore.exe"Close #1 Shell "regedit /s C: eg.reg" Kill "c: eg.reg" End Sub2023-07-29 19:18:211
vc的各编译选项都是什么意思?
VC编译选项/Od 禁用优化(默认值) disable optimizations (default) /Ox 最大化选项。(/Ogityb2 /Gs) maximum opts. (/Ogityb1 /Gs) /Og 启用全局优化 enable global optimization /Oy[-] 启用框架指针省略 enable frame pointer omission /Oi 启用内建函数 enable intrinsic functions -代码生成- /G3 为 80386 进行优化 optimize for 80386 /G4 为 80486 进行优化 optimize for 80486 /GR[-] 启用 C++ RTTI enable C++ RTTI /G5 为 Pentium 进行优化 optimize for Pentium /G6 为 Pentium Pro 进行优化 optimize for Pentium Pro /GX[-] 启用 C++ 异常处理(与 /EHsc 相同) enable C++ EH (same as /EHsc) /EHs 启用同步 C++ 异常处理 enable synchronous C++ EH /GD 为 Windows DLL 进行优化 optimize for Windows DLL /GB 为混合模型进行优化(默认) optimize for blended model (default) /EHa 启用异步 C++ 异常处理 enable asynchronous C++ EH /Gd __cdecl 调用约定 __cdecl calling convention /EHc extern“C”默认为 nothrow extern "C" defaults to nothrow /Gr __fastcall 调用约定 __fastcall calling convention /Gi[-] 启用增量编译 enable incremental compilation /Gz __stdcall 调用约定 __stdcall calling convention /Gm[-] 启用最小重新生成 enable minimal rebuild /GA 为 Windows 应用程序进行优化 optimize for Windows Application /Gf 启用字符串池 enable string pooling /QIfdiv[-] 启用 Pentium FDIV 修复 enable Pentium FDIV fix /GF 启用只读字符串池 enable read-only string pooling /QI0f[-] 启用 Pentium 0x0f 修复 enable Pentium 0x0f fix /Gy 分隔链接器函数 separate functions for linker /GZ 启用运行时调试检查 enable runtime debug checks /Gh 启用钩子函数调用 enable hook function call /Ge 对所有函数强制堆栈检查 force stack checking for all funcs /Gs[num] 禁用堆栈检查调用 disable stack checking calls -输出文件- /Fa[file] 命名程序集列表文件 name assembly listing file /Fo 命名对象文件 name object file /FA[sc] 配置程序集列表 configure assembly listing /Fp 命名预编译头文件 name precompiled header file /Fd[file] 命名 .PDB 文件 name .PDB file /Fr[file] 命名源浏览器文件 name source browser file /Fe 命名可执行文件 name executable file /FR[file] 命名扩展 .SBR 文件 name extended .SBR file /Fm[file] 命名映射文件 name map file -预处理器- /FI 命名强制包含文件 name forced include file /C 不吸取注释 don"t strip comments /U 移除预定义宏 remove predefined macro /D{=|#} 定义宏 define macro /u 移除所有预定义宏 remove all predefined macros /E 将预处理定向到标准输出 preprocess to stdout /I 添加到包含文件的搜索路径 add to include search path /EP 将预处理定向到标准输出,不要带行号 preprocess to stdout, no #line /X 忽略“标准位置” ignore "standard places" /P 预处理到文件 preprocess to file -语言- /Zi 启用调试信息 enable debugging information /Zl 忽略 .OBJ 中的默认库名 omit default library name in .OBJ /ZI 启用调试信息的“编辑并继续”功能 enable Edit and Continue debug info /Zg 生成函数原型 generate function prototypes /Z7 启用旧式调试信息 enable old-style debug info /Zs 只进行语法检查 syntax check only /Zd 仅要行号调试信息 line number debugging info only /vd{0|1} 禁用/启用 vtordisp disable/enable vtordisp /Zp[n] 在 n 字节边界上包装结构 pack structs on n-byte boundary /vm 指向成员的指针类型 type of pointers to members /Za 禁用扩展(暗指 /Op) disable extensions (implies /Op) /noBool 禁用“bool”关键字 disable "bool" keyword /Ze 启用扩展(默认) enable extensions (default) - 杂项 - /?, /help 打印此帮助消息 print this help message /c 只编译,不链接 compile only, no link /W 设置警告等级(默认 n=1) set warning level (default n=1) /H 最大化外部名称长度 max external name length /J 默认 char 类型是 unsigned default char type is unsigned /nologo 取消显示版权消息 suppress copyright message /WX 将警告视为错误 treat warnings as errors /Tc 将文件编译为 .c compile file as .c /Yc[file] 创建 .PCH 文件 create .PCH file /Tp 将文件编译为 .cpp compile file as .cpp /Yd 将调试信息放在每个 .OBJ 中 put debug info in every .OBJ /TC 将所有文件编译为 .c compile all files as .c /TP 将所有文件编译为 .cpp compile all files as .cpp /Yu[file] 使用 .PCH 文件 use .PCH file /V 设置版本字符串 set version string /YX[file] 自动的 .PCH 文件 automatic .PCH /w 禁用所有警告 disable all warnings /Zm 最大内存分配(默认为 %) max memory alloc (% of default) -链接- /MD 与 MSVCRT.LIB 链接 link with MSVCRT.LIB /MDd 与 MSVCRTD.LIB 调试库链接 link with MSVCRTD.LIB debug lib /ML 与 LIBC.LIB 链接 link with LIBC.LIB /MLd 与 LIBCD.LIB 调试库链接 link with LIBCD.LIB debug lib /MT 与 LIBCMT.LIB 链接 link with LIBCMT.LIB /MTd 与 LIBCMTD.LIB 调试库链接 link with LIBCMTD.LIB debug lib /LD 创建 .DLL Create .DLL /F 设置堆栈大小 set stack size /LDd 创建 .DLL 调试库 Create .DLL debug libary /link [链接器选项和库] [linker options and libraries]2023-07-29 19:18:301
急急急!求高手汉译英,谢绝翻译软件版!
准备进来试一下,一看这么大一篇..还是算啦~~等待高手来帮你翻译~~2023-07-29 19:18:426
求助,c++编程!!!!!
太难了吧,不好意思,帮不上忙了!2023-07-29 19:19:0913
关于asp.net的英语文献一篇,3000词以上,我自己翻译就可以,谢谢
不要太多啊www.asp.netwww.codeproject.com....2023-07-29 19:19:332
计算机英语翻译(100分赠送)
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Temp: TButton; begin Temp.Parent := Form1; // 问题A Temp.Top := Y; Temp.Left := X; Temp.Width := Temp.Width + 100; end; 这段代码如果缺了问题所在的那一段,那么按钮就不会出现,原因是什么呢?我才学OOP,您们如何理解这个Parent 呢?是不是说如果没有 Parent 那么Button 就没有生根的地方? 却是如此,我试了一下,如果Parent 写成 另外的一个很大的按钮(半个窗体大小的)或者组件,那么按钮就会在所定义的那个组件上面出现,不过这个问题 已经写了,还是问吧,老虾可不可以讲讲原理呢? 我是从Turbo Basic 转行到 Delphi, 现在全力学习 OOP 思想,请多关照! Parent为包含该控件的父控件,这不是OOP的思想,是‘MS的MDI思想" 父组件,容器 unit Unit10; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Panel1: TPanel; Panel2: TPanel; procedure Button1Click(Sender: TObject); procedure Panel1Click(Sender: TObject); procedure Panel2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Button1.Parent := Panel1; Button1.SetBounds(0, 0, Button1.Width, Button1.Height); end; procedure TForm1.Panel1Click(Sender: TObject); begin Button1.Parent := Panel1; Button1.SetBounds(0, 0, Button1.Width, Button1.Height); end; procedure TForm1.Panel2Click(Sender: TObject); begin Button1.Parent := Panel2; Button1.SetBounds(0, 0, Button1.Width, Button1.Height); end; end. 这个不是OOP的东西,windows的东西 当设置Parent时,会导致delphi调用DestroyHandle, 接着调用CreateHandle, 重建Button, 在CreateParams时, if Parent <> nil then WndParent := Parent.GetHandle 取相应的Parent的Handle, 然后CreateWindowEx, 恐怕不能放到一个很大的按钮上,因为Parent必须是个容器,象:form,panel,groupbox…… >恐怕不能放到一个很大的按钮上,因为Parent必须是个容器,象:form,panel,groupbox The fact is I put the buttons on a very large button!!!!2023-07-29 19:19:435
样品工程师是什么,主要是做什么工作的?
(电子样品工程师)职位说明及要求 Responsibilities:To carry out activities to get electronic board prototypes. Get the PCB ( carried out internally or by sub-contractors ), make the assembly of the components according to the BOM and solder them.Report the problem encountered during the mounting / assembly of the prototypesFrom the BOM delivered to build the prototype, find the right components, identify those missing and place an order to get them in line with the schedule.Maintain the laboratory stocks of components and various materials needed for the laboratory activities. Order those components to keep a minimum stock available.Build specific test benches needed to validate our products ( reliability test benches, functional test benches …. )Build or modify wiring harness of appliances to be able to perform the laboratory tests.Propose equipment necessary to carry out electronic prototypes and tests benches.Requirements:0 to 5 years working experience in a similar position, mounting / assembling electronic products for similar markets.Electronic technician graduated.Good knowledge of electronic components ( through holes and SMD technologies ) and electric wirings.Knowledge ( understand ) CAD documentations and BOM files.Fluent in English not required.2023-07-29 19:20:001
请帮我把下面的文章翻译成英文
2008年中国北京奥运会,是中国人等待了百年的梦想,还有八天,奥运会就要开始了,列数奥运会的项目,有田径 篮球 足球 排球 棒球 网球 羽毛球 排球 乒乓球 鞍马 体操 游泳 跳水 射击 武术等等,近几年在中国的奥运会上,出现了许多有名的奥运健将,如刘翔 姚明 郭晶晶 王楠 张怡宁 刘璇等等,他们都在奥运的各个领域做出了不同的贡献,但是他们无不体现了奥运的精神,更快 更高 更强。这次奥运的五个福娃,贝贝 晶晶 欢欢 迎迎和妮妮,他们不仅代表了奥运五环,还代表了奥运的各个项目,五个可爱的福娃,分别以鱼 熊猫 奥运圣火 藏羚羊 燕子为原型,表示了海洋 大山 火炬 大地和天空,更表示了五湖四海,表明我们接待来自世界各地的客人,奥运会不仅是一场比赛,而且更是为了团结全世界的人去完成自己的梦想,这也应正了奥运的口号 同一个世界 同一个梦想in 2008 Beijing, China Olympic Games, were the Chinese have waited for hundred year dream, but also eight days, the Olympic Games must start, enumerated Olympic Games" project, had track and field basketball soccer volleyball baseball tennis badminton volleyball pingpong side horse gymnastics swimming diving fire martial arts and so on, in recent years at China"s Olympic Games, presented many famous Olympic Games star athletes, like Liu Xiang Yao Ming Guo Jingjing Wang Nan Zhang Yining Liu Xuan and so on, they have made the different contribution at Olympic Games" each domain, but they have manifested Olympic Games" spirit all, Gauguin was quickly stronger. This Olympic Games" five lucky baby, shell shell clear happy welcome welcomes with Nini, they have not only represented the Olympic Games five links, but also has represented Olympic Games" each project, five lovable lucky babies, respectively take the fish panda Olympic Games ceremonial fire Tibet antelope swallow as the prototypes, expressed the sea mountain torch earth and the sky, expressed all corners of the country, indicated that we receive from the world"s the visitor, the Olympic Games are not only a competition, moreover is for the human who unites the world completes own dream, this is the Olympics should be the slogan of One World, One Dream2023-07-29 19:20:192
google实验室是干什么的?
不知道,关注2023-07-29 19:20:372
翻译一下这篇文章,热心网友,非常感谢。
我可以给你人工翻译,加qq详谈。2023-07-29 19:20:484
电脑分辨率如何自动调整?
要根据你的显示屏分辨率来说了2023-07-29 19:20:584
谁知道pb用oledb怎么连有密码的access的数据库
PB提供了一个DATA LINK 的接口使我们可以通过UDL文件来连接带有密码的ACCESS。 这样我们就可以通过动态生成UDL文件,然后连接ACCESS数据库,具体做法如下:Integer li_FileNum String ls_udl //写入UDL ls_udl = "[oledb]~r~n; Everything after this line is an OLE DB initstring~r~n" ls_udl+= "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=数据库路径;Persist Security Info=False;Jet OLEDB:Database Password=密码"f_writeFile("Connect.udl",ls_udl,"Unicode") //UDL 要求是UNICODE编码// Profile msg SQLCA.DBMS = "OLE DB" SQLCA.AutoCommit = False SQLCA.DBParm = "PROVIDER="Microsoft.Jet.OLEDB.4.0",DATALINK="connect.udl"" Connect; FileDelete("Connect.udl") if sqlca.sqlcode=-1 then messagebox("提示","数据库连接错误.~r~n"+sqlca.sqlerrtext) end if将一下文本另存为 f_writefile.srf,只有PB9及其以前的版本需要这样做,BP10之后可以直接使用PB的FileOpen来解决$PBExportHeader$f_writefile.srf $PBExportComments$写入到指定格式的文件中global type f_writefile from function_object end type forward prototypes global subroutine f_writefile (string as_file, string as_str, string as_typ) end prototypes global subroutine f_writefile (string as_file, string as_str, string as_typ);//==================================================================== // 事件: .f_writefile() //-------------------------------------------------------------------- // 描述:写入到指定格式的文件中,用于PB9生成UNICODEUTF8文件//--------------------------------------------------------------------// 参数: // value string as_file 文件名// value string as_str 要写入的内容// value string as_typ 文件编码类型 "UNICODE" / "UTF-8" //-------------------------------------------------------------------- // 返回: (none) //-------------------------------------------------------------------- // 作者: topany 日期: 2008年06月30日//--------------------------------------------------------------------// 版权: Topany //-------------------------------------------------------------------- // 修改历史: // //====================================================================OLEObject ole_ADOStream ole_ADOStream = Create OLEObject ole_ADOStream.ConnectToNewObject("ADODB.Stream") ole_ADOStream.Open() ole_ADOStream.Position = 0 //Position为0才能设置Charset ole_ADOStream.Type = 2 //文本数据 1-adTypeBinary 2-adTypeText ole_ADOStream.Charset = as_typ ole_ADOStream.WriteText(as_str) ole_ADOStream.SaveToFile(as_file,2) ole_ADOStream.Close() Destroy ole_ADOStreamend subroutine2023-07-29 19:21:171
如何用单片机C语言进行三角函数运算?最好给出代码!
/*--------------------------------------------------------------------------MATH.HPrototypes for mathematic functions.Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.All rights reserved.--------------------------------------------------------------------------*/#ifndef __MATH_H__#define __MATH_H__#pragma SAVE#pragma REGPARMSextern char cabs (char val);extern int abs (int val);extern long labs (long val);extern float fabs (float val);extern float sqrt (float val);extern float exp (float val);extern float log (float val);extern float log10 (float val);extern float sin (float val);extern float cos (float val);extern float tan (float val);extern float asin (float val);extern float acos (float val);extern float atan (float val);extern float sinh (float val);extern float cosh (float val);extern float tanh (float val);extern float atan2 (float y, float x);extern float ceil (float val);extern float floor (float val);extern float modf (float val, float *n);extern float fmod (float x, float y);extern float pow (float x, float y);#pragma RESTORE#endif使用数学头文件math.h,然后调用函数既要可以了。2023-07-29 19:21:283
舒马赫说过的名言
速度解决一切问题、。。 要我踩刹车?没门儿!”2023-07-29 19:21:504
麻烦大家帮忙翻译一下,谢谢!
新的阶段,擅长于风俗光学作出你的严苛需求-从原型,以充分O EM生产。一个已经验证的记录就准时送货量的最高品质光学的,我们已准备就绪,以满足您的定制光学需要。帮助你,我们已经准备了简短的写起来的共同光学规格及设计上考虑。请勿不要犹豫,请我们了解更多信息。了解光学规格订购时定制光学,在一些问题上出现的,从而极大地影响整体性能和成本的最后视神经。一般来说,一个更加严格的规范,将增加额外的成本,以成品一块。目的是为了确定一种视神经满足,而不越位,所要求的规格,其申请。我们的配镜师有一个联合的经验超过60年的捏造定制光学及可以帮助你达到最佳的价格/性能比,为您的定制视神经的要求。新的阶段,汇编了下列资料,以协助澄清各种规格时,需要设计一个视神经及它们的相对成本的影响。表面质量划痕非开挖比例( SD )和波前误差是两个突出的表面质量因素的影响光学性能。刮掉挖-这个参数描述表面不被弄脏后,留下最后的抛光及涂层(如使用) 。百万规格百万- 0 - 13830a是用来作为行业标准来界定从头开掘。第一个数字,从零开始,是指以最高容许从零开始宽度在微米(即60-40的SD若干具体规定最高从零开始宽度60毫米) 。公差就被抓伤的定义是:# 10从零开始= 10 ± 0.5 μ m的# 20从零开始= 20 ± 1.0 μ m的# 40从零开始= 40 ± 2.0 μ m的# 60从零开始= 60 ± 3.0 μ m的# 80从零开始= 80 ± 4.0 μ m的第二个号码,挖掘,是指窖或小环形山上的表面光。挖若干描述直径该开掘在1/100th一毫米(即60-40指的是一个挖的0.4毫米直径公差就开掘是定义为:# 5挖= 0.05 ± 0.00254毫米# 10挖= 0.10 ± 0.00508毫米# 20挖= 0.20 ± 0.00762毫米# 40挖= 0.40 ± 0.01016毫米# 50挖= 0.50 ± 0.01270毫米实际例子刮掉挖:刮掉挖掘应用相对成本80-50化妆品标准,成本低,成像系统$60-40商业等级,非关键性应用元元40-20标准科研应用元元元20-10激光反射镜和腔外光学元元元元10-5内部腔激光光学,高功率应用$$$$$$2023-07-29 19:21:571
哪位高人帮我把这段翻译成英语?急!急!急!!!
http://zhidao.baidu.com/question/51318100.html2023-07-29 19:22:052
求《变形金刚4》的英语简介,要没有语法错误,句子通顺的,不要太长。
可以直接百度2023-07-29 19:22:145
急急急!说唱类音乐在线等!!
Do It All Night--E-Rotic2023-07-29 19:22:298
unistd.h的源码
#ifndef _UNISTD_H#define _UNISTD_H#include <features.h>#ifdef __cplusplusextern C {#endif#include <_ansi.h>#include <sys/types.h>#include <sys/_types.h>#define __need_size_t#define __need_ptrdiff_t#include <stddef.h>extern char **environ;void _EXFUN(_exit, (int __status ) _ATTRIBUTE ((noreturn)));int _EXFUN(access,(const char *__path, int __amode ));unsigned _EXFUN(alarm, (unsigned __secs ));int _EXFUN(chdir, (const char *__path ));int _EXFUN(chmod, (const char *__path, mode_t __mode ));int _EXFUN(chown, (const char *__path, uid_t __owner, gid_t __group ));int _EXFUN(chroot, (const char *__path ));int _EXFUN(close, (int __fildes ));char _EXFUN(*ctermid, (char *__s ));char _EXFUN(*cuserid, (char *__s ));int _EXFUN(dup, (int __fildes ));int _EXFUN(dup2, (int __fildes, int __fildes2 ));int _EXFUN(execl, (const char *__path, const char *, ... ));int _EXFUN(execle, (const char *__path, const char *, ... ));int _EXFUN(execlp, (const char *__file, const char *, ... ));int _EXFUN(execv, (const char *__path, char * const __argv[] ));int _EXFUN(execve, (const char *__path, char * const __argv[], char * const __envp[] ));int _EXFUN(execvp, (const char *__file, char * const __argv[] ));int _EXFUN(fchdir, (int __fildes));int _EXFUN(fchmod, (int __fildes, mode_t __mode ));int _EXFUN(fchown, (int __fildes, uid_t __owner, gid_t __group ));pid_t _EXFUN(fork, (void ));long _EXFUN(fpathconf, (int __fd, int __name ));int _EXFUN(fsync, (int __fd));int _EXFUN(ftruncate, (int __fd, off_t __length));char _EXFUN(*getcwd, (char *__buf, size_t __size ));int _EXFUN(getdomainname ,(char *__name, size_t __len));gid_t _EXFUN(getegid, (void ));uid_t _EXFUN(geteuid, (void ));gid_t _EXFUN(getgid, (void ));int _EXFUN(getgroups, (int __gidsetsize, gid_t __grouplist[] ));int _EXFUN(__gethostname, (char *__name, size_t __len));char _EXFUN(*getlogin, (void ));#if defined(_POSIX_THREAD_SAFE_FUNCTIONS)int _EXFUN(getlogin_r, (char *name, size_t namesize) );#endifchar _EXFUN(*getpass, (__const char *__prompt));int _EXFUN(getpagesize, (void));pid_t _EXFUN(getpgid, (pid_t));pid_t _EXFUN(getpgrp, (void ));pid_t _EXFUN(getpid, (void ));pid_t _EXFUN(getppid, (void ));uid_t _EXFUN(getuid, (void ));char * _EXFUN(getusershell, (void));char _EXFUN(*getwd, (char *__buf ));int _EXFUN(isatty, (int __fildes ));int _EXFUN(lchown, (const char *__path, uid_t __owner, gid_t __group ));int _EXFUN(link, (const char *__path1, const char *__path2 ));int _EXFUN(nice, (int __nice_value ));off_t _EXFUN(lseek, (int __fildes, off_t __offset, int __whence ));long _EXFUN(pathconf, (const char *__path, int __name ));int _EXFUN(pause, (void ));int _EXFUN(pipe, (int __fildes[2] ));ssize_t _EXFUN(pread, (int __fd, void *__buf, size_t __nbytes, off_t __offset));ssize_t _EXFUN(pwrite, (int __fd, const void *__buf, size_t __nbytes, off_t __offset));_READ_WRITE_RETURN_TYPE _EXFUN(read, (int __fd, void *__buf, size_t __nbyte ));int _EXFUN(readlink, (const char *path, char *buf, size_t bufsiz));int _EXFUN(rmdir, (const char *__path ));void * _EXFUN(sbrk, (ptrdiff_t __incr));int _EXFUN(setegid, (gid_t __gid ));int _EXFUN(seteuid, (uid_t __uid ));int _EXFUN(setgid, (gid_t __gid ));int _EXFUN(setpgid, (pid_t __pid, pid_t __pgid ));int _EXFUN(setpgrp, (void ));pid_t _EXFUN(setsid, (void ));int _EXFUN(setuid, (uid_t __uid ));unsigned _EXFUN(sleep, (unsigned int __seconds ));void _EXFUN(swab, (const void *, void *, ssize_t));int _EXFUN(symlink, (const char *oldpath, const char *newpath));long _EXFUN(sysconf, (int __name ));pid_t _EXFUN(tcgetpgrp, (int __fildes ));int _EXFUN(tcsetpgrp, (int __fildes, pid_t __pgrp_id ));int _EXFUN(truncate, (const char *, off_t __length));char * _EXFUN(ttyname, (int __fildes ));int _EXFUN(ttyname_r, (int __fildes, char *__buf, size_t __len));int _EXFUN(unlink, (const char *__path ));int _EXFUN(usleep, (__useconds_t __useconds));int _EXFUN(vhangup, (void ));_READ_WRITE_RETURN_TYPE _EXFUN(write, (int __fd, const void *__buf, size_t __nbyte ));extern char *optarg; /** getopt(3) external variables */extern int optind, opterr, optopt;int getopt(int, char * const [], const char *);extern int optreset; /** getopt(3) external variable */#ifndef _POSIX_SOURCEpid_t _EXFUN(vfork, (void ));extern char *suboptarg; /** getsubopt(3) external variable */int getsubopt(char **, char * const *, char **);#endif /** _POSIX_SOURCE *//** Provide prototypes for most of the _<systemcall> names that areprovided in newlib for some compilers. */int _EXFUN(_close, (int __fildes ));pid_t _EXFUN(_fork, (void ));pid_t _EXFUN(_getpid, (void ));int _EXFUN(_link, (const char *__path1, const char *__path2 ));off_t _EXFUN(_lseek, (int __fildes, off_t __offset, int __whence ));_READ_WRITE_RETURN_TYPE _EXFUN(_read, (int __fd, void *__buf, size_t __nbyte ));void * _EXFUN(_sbrk, (size_t __incr));int _EXFUN(_unlink, (const char *__path ));_READ_WRITE_RETURN_TYPE _EXFUN(_write, (int __fd, const void *__buf, size_t __nbyte ));int _EXFUN(_execve, (const char *__path, char * const __argv[], char * const __envp[] ));#define F_OK 0#define R_OK 4#define W_OK 2#define X_OK 1# define SEEK_SET 0# define SEEK_CUR 1# define SEEK_END 2#include <sys/features.h>#define STDIN_FILENO 0 /** standard input file descriptor */#define STDOUT_FILENO 1 /** standard output file descriptor */#define STDERR_FILENO 2 /** standard error file descriptor */#include <bits/environments.h>#include <bits/confname.h># define MAXPATHLEN 1024#ifdef __cplusplus}#endif#endif /** _SYS_UNISTD_H */2023-07-29 19:22:501
爱迪生的英文故事
Edison story of his life Edison had only three months on the primary school, his mother"s knowledge by teaching and self-study comes from. His success should be attributed to the mother at a young age for his understanding and patience to teach, only to make people think the original was the Edison are imbecile, when they grow up to become a world famous "King of the invention." Edison childhood on a lot of curious things, and likes to test himself go, until one of understand the logic so far. Grow up, he would in this respect according to their own interests, heart and soul to do research and invention work.2023-07-29 19:23:112
怎样让dac输出电压值稳定不调动
玩了几天模拟电路,因做程控放大电路,需要输出可调电压,于是转战STM32上来了,采用DMA通道输出DAC,输出为一正弦波。DAC配置略显简单,由于悟性不够,部分原因还是不懂。DMA通道传送DAC时,选取DAC_Channnel2程序很好使,而改为DAC_Channnel1时,相应地址等均作改变,但是就是没有波形输出,无果。选用TIM2作定时器触发,TIM2在APB1上,最高频率36MHz,预分频系数为1时测出正弦波形频率经换算频率为72MHz,而预分频系数为2时,换算频率为36MHz,正常情况应该相等的,不明所以。查询资料,有博客上说,采用默认库配置,TIM2最高频率可以为72MHz,不理解。于是更改程序,自己配置时钟,预分频系数为1时依然为72MHz,而预分频系数为2时,频率为36MHz,无果//purpose:DA转换,DAC1->PA4管脚输出转换后的模拟值,DAC2->PA5//产生正弦波频率=主频/(TIM_Prescaler+1)/TIM_Period/产生一个正弦波的点数#include"stm32f10x.h"#defineDAC_DHR12R2_Address0x40007414//相应地址通过数据手册和参考手册去查询/*InitStructuredefinition*/DAC_InitTypeDefDAC_InitStructure;DMA_InitTypeDefDMA_InitStructure;TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;constuint16_tSine12bit[32]={//数据源用来产生波形2047,2447,2831,3185,3498,3750,3939,4056,4095,4056,3939,3750,3495,3185,2831,2447,2047,1647,1263,909,599,344,155,38,0,38,155,344,599,909,1263,1647};uint32_tDualSine12bit[32];uint32_tIdx=0;/*Privatefunctionprototypes-----------------------------------------------*/voidRCC_Configuration(void);voidTIM_Configuration(void);voidDAC_Configuration(void);voidDMA_Configuration(void);voidGPIO_Configuration(void);intmain(void){/*!2023-07-29 19:23:311
一般移动端页面怎么适配ios页面
1、viewport 简单粗暴的方式:<meta name="viewport" content="width=320,maximum-scale=1.3,user-scalable=no">直接设置viewport为320px的1.3倍,将页面放大1.3倍。为什么是1.3?目前大部分页面都是以320px为基准的布局,而iphone6的宽度比是375/320 = 1.171875,iphone6+则是 414/320 = 1.29375那么以1.29倍也就约等于1.3了。2、ip6+ 的CSS media query@media (min-device-width : 375px) and (max-device-width : 667px) and (-webkit-min-device-pixel-ratio : 2){ /*iphone 6*/}@media (min-device-width : 414px) and (max-device-width : 736px) and (-webkit-min-device-pixel-ratio : 3){ /*iphone 6 plus*/}PS: 也可以直接使用实际的device-width:如 device-width : 375px在原有页面的基础上,再针对相应的屏幕大小单独写样式做适配。3、REM布局REM是CSS3新增的一种单位,并且移动端的支持度很高,android2.x+,ios5+ 都支持。REM是相对于dom结构的根元素来设置大小,也就是html这个元素。相较于em单位,rem使用上更容易理解及运用。REM与PX的换算可以查看网址: https://offroadcode.com/prototypes/rem-calculator/假设,html我们设置font-size:12px; 也就是说12px相对于1rem,那么18px也就是 18/12 = 1.5rem。那么我们以320px的设计布局为基准,将html设置为font-size:100px,即100px = 1rem。(设置100px是为了方便计算)那么可以将大部分px单位除以100就可以直接改成rem单位了。REM如何做响应式布局?1、如果仅仅是适配ip6+设备,那么使用media query就行。伪代码如下:/*320px布局*/html{font-size: 100px;}body{font-size: 0.14rem /*实际相当于14px*/}/* iphone 6 */@media (min-device-width : 375px) and (max-device-width : 667px) and (-webkit-min-device-pixel-ratio : 2){ html{font-size: 117.1875px;}}/* iphone6 plus */@media (min-device-width : 414px) and (max-device-width : 736px) and (-webkit-min-device-pixel-ratio : 3){ html{font-size: 129.375px;}}这样,在ip6下,也就将页面内的元素放大了1.17倍,ip6+下也就是放大了1.29倍。2、如果是完全自适应,那么可以通过JS来控制。(function (doc, win) { var docEl = doc.documentElement, resizeEvt = "orientationchange" in window ? "orientationchange" : "resize", recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWidth) return; docEl.style.fontSize = 100 * (clientWidth / 320) + "px"; }; // Abort if browser does not support addEventListener if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); doc.addEventListener("DOMContentLoaded", recalc, false);})(document, window);页面初始化的时候计算font-size,然后再绑定resize事件。这种效果就和百分比布局一样了。2023-07-29 19:23:381
求嵌入式linux开发详细流程(步骤)?
哎,没意思的.换其他的玩好啦.我带你2023-07-29 19:23:5010
empathizing with others 是什么意思?
与他人empathizing2023-07-29 19:24:172
zbrush安装过程出现error creating directory c:/要怎么解决啊?
这样 把中间那个不勾选好像就能安装成功2023-07-29 19:24:292
车王舒马赫获得过多少F1大奖赛的冠军
7次!!! 看看下面这些吧!!!!骄傲呀!!!永远支持舒米~~~~~~ 06年中国站 06年意大利站 06年德国站 06年法国站 06年美国站 06年欧洲站 06年圣马力诺站 05年美国站 (黑暗的一个赛季!!) 04年日本站 (辉煌!!!) 04年匈牙利站 04年德国站 04年英国站 04年法国站 04年美国站 04年加拿大站 04年欧洲站 04年西班牙站 04年圣马力诺站 04年巴林站 04年马来西亚站 04年澳大利亚站 03年美国站 03年意大利站 03年加拿大站 03年奥地利站 03年西班牙站 03年圣马力诺站 02年日本站 02年比利时站 02年德国站 02年法国站 02年英国站 02年加拿大站 02年奥地利站 02年西班牙站 02年圣马力诺站 02年巴西站 02年澳大利亚站 01年日本站 01年比利时站 01年匈牙利站 01年法国站 01年欧洲站 01年摩纳哥站 01年西班牙站 01年马来西亚站 01年澳大利亚站 2000年马来西亚站 2000年日本站 2000年美国站 2000年意大利站 2000年加拿大站 2000年欧洲站 2000年圣马力诺站 2000年巴西站 2000年澳大利亚站 99年摩纳哥站 99年圣马力诺站 98年意大利站 98年匈牙利站 98年英国站 98年法国站 98年加拿大站 98年阿根廷站 97年日本站 97年比利时站 97年法国站 97年加拿大站 97年摩纳哥站 96年意大利站 96年比利时站 96年西班牙站 95年日本站 95年太平洋站 95年欧洲站 95年比利时站 95年德国站 95年法国站 95年摩纳哥站 95年西班牙站 95年巴西站 94年欧洲站 94年匈牙利站 94年法国站 94年加拿大站 94年摩纳哥站 94圣马力诺站 94年太平洋站 94年巴西站 93年葡萄牙站 92年比利时站 迈克尔-舒马赫已经做到的(至2006年土耳其站): 年度车手总冠军:7次(1994年、1995年、2000年、2001年、2002年、2003年、2004年) (第二名为方吉奥5次) 连续夺得年度总冠军次数:5次(2000年至2004年) 分站冠军次数:90次(第二名为普罗斯特51次) 单赛季分站冠军次数:13次(2004赛季) 单赛季连续获胜场次:7场(2004赛季) 登上领奖台次数:153(第二名为普罗斯特106次) 单圈最快圈速次数:75(第二名为普罗斯特41次) 职业生涯总积分:1354分(第二名为普罗斯特798分) 单赛季个人积分:148分(2004赛季) 单场分站赛夺冠次数:7次(加拿大站、法国站) 上演“帽子戏法”次数(获得杆位、跑出单圈最快成绩并获得冠军):22次 连续在分站赛上得分次数:2001至2003年期间24站比赛连续得分 连续在分站赛上登上领奖台次数:2001至2002年期间连续19站 历史上唯一一个曾在一年的各个分站赛中全部进入前三名的车手:2002赛季 年度车手积分榜上与亚军差距最大的一次:2002年领先67分获得冠军 赛季过程中最早锁定年度总冠军:2002年离赛季结束还有6站时已经卫冕 迈克尔-舒马赫和前队友巴里切罗还是历史上并肩获得分站赛前两名最多的队友:两人曾24次占据领奖台最高的两层 杆位次数:68(前纪录艾尔顿-塞纳65) 迈克尔-舒马赫依然在努力着的: 参加分站赛次数:246(距离帕特瑞斯257次参赛纪录还差11场) 看看图片吧!!!! 参考资料: http://sports.sina.com.cn/f1/2006f1italygp/photo/32468/index.shtml2023-07-29 19:24:582
谁有舒米的资料
没有必要知道的那么全面!又不是派出所查户口!只要知道他是7届世界冠军,现在效力于法拉利车队!是现在场上年龄最大的F1车手2023-07-29 19:25:067
本人想用stm32的DAC输出固定电压值,,有人之前调试过这个项目吗?我急需例程。求解救。
玩了几天模拟电路,因做程控放大电路,需要输出可调电压,于是转战STM32上来了,采用DMA通道输出DAC,输出为一正弦波。 DAC配置略显简单,由于悟性不够,部分原因还是不懂。DMA通道传送DAC时,选取DAC_Channnel2程序很好使,而改为DAC_Channnel1时,相应地址等均作改变,但是就是没有波形输出,无果。 选用TIM2作定时器触发,TIM2在APB1上,最高频率36MHz,预分频系数为1时测出正弦波形频率经换算频率为72MHz,而预分频系数为2时,换算频率为36MHz,正常情况应该相等的,不明所以。查询资料,有博客上说,采用默认库配置,TIM2最高频率可以为72MHz,不理解。于是更改程序,自己配置时钟,预分频系数为1时依然为72MHz,而预分频系数为2时,频率为36MHz,无果//purpose: DA转换,DAC1->PA4管脚输出转换后的模拟值 ,DAC2->PA5// 产生正弦波频率= 主频/(TIM_Prescaler+1)/TIM_Period/产生一个正弦波的点数 #include "stm32f10x.h"#define DAC_DHR12R2_Address 0x40007414 //相应地址通过数据手册和参考手册去查询/* Init Structure definition */DAC_InitTypeDef DAC_InitStructure;DMA_InitTypeDef DMA_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;const uint16_t Sine12bit[32] = { //数据源用来产生波形 2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056, 3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909, 599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647};uint32_t DualSine12bit[32];uint32_t Idx = 0; /* Private function prototypes -----------------------------------------------*/void RCC_Configuration(void);void TIM_Configuration(void);void DAC_Configuration(void);void DMA_Configuration(void);void GPIO_Configuration(void);int main(void){ /*!< At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function which is called from startup file (startup_stm32f10x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10x.c file */ // System Clocks Configuration RCC_Configuration(); /* Once the DAC channel is enabled, the corresponding GPIO pin is automatically connected to the DAC converter. In order to avoid parasitic consumption, the GPIO pin should be configured in analog */ GPIO_Configuration();TIM_Configuration();DAC_Configuration(); for (Idx = 0; Idx < 32; Idx++) { DualSine12bit[Idx] = (Sine12bit[Idx] << 16) + (Sine12bit[Idx]); //双通道输出正弦波 }DMA_Configuration(); /* Enable DMA for DAC Channel1 */ DAC_DMACmd(DAC_Channel_2, ENABLE);/* TIM6 enable counter */ TIM_Cmd(TIM6, ENABLE);while (1) { }}/** * @brief Configures the different system clocks. * @param None * @retval None */void RCC_Configuration(void){ //时钟配置,不使用库默认时钟配置 ErrorStatus HSEStartUpStatus; //定义外部高速晶体启动状态枚举变量 RCC_DeInit(); //复位RCC外部设备寄存器到默认值 RCC_HSEConfig(RCC_HSE_ON); //打开外部高速晶振 HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待外部高速时钟准备好 if(HSEStartUpStatus == SUCCESS) //外部高速时钟已经准别好 { RCC_HCLKConfig(RCC_SYSCLK_Div1); //配置AHB(HCLK)时钟=SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1); //配置APB2(PCLK2)钟=AHB时钟 RCC_PCLK1Config(RCC_HCLK_Div2); //配置APB1(PCLK1)钟=AHB 1/2时钟 RCC_ADCCLKConfig(RCC_PCLK2_Div4); //配置ADC时钟=PCLK2 1/4 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //配置PLL时钟 == 外部高速晶体时钟*9 RCC_ADCCLKConfig(RCC_PCLK2_Div4); //配置ADC时钟= PCLK2/4 RCC_PLLCmd(ENABLE); //使能PLL时钟 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL时钟就绪 { } RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//配置系统时钟 = PLL时钟 while(RCC_GetSYSCLKSource() != 0x08) //检查PLL时钟是否作为系统时钟 { } }// DMA2 clock enable RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);/* GPIOA Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* DAC Periph clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); /* TIM2 Periph clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);}void TIM_Configuration(void){// Time base configuration TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Period = 25-1; //计数周期25 TIM_TimeBaseStructure.TIM_Prescaler = 1-1; //预分频系数1 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数 TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); // TIM6 TRGO selection */ TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update); //触发源更新}void DAC_Configuration(void){// DAC channel1 Configuration DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; //DAC触发 TIM6触发 DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; //不使用内部波形发生器 DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; //关闭外部输出缓存 DAC_Init(DAC_Channel_1, &DAC_InitStructure); //用DAC输出波形,传输的数据比较多,所以采用DMA传输可以节省CPU的开支DAC_Init(DAC_Channel_2, &DAC_InitStructure);// Enable DAC Channel1: Once the DAC channel1 is enabled, PA.04 is automatically connected to the DAC converter DAC_Cmd(DAC_Channel_1, ENABLE);DAC_Cmd(DAC_Channel_2, ENABLE);}void DMA_Configuration(void){ DMA_DeInit(DMA2_Channel4); //将dma的通道寄存器设为默认值DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R2_Address; //定义dma外设基地址 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&Sine12bit; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //外设作为数据传输的目的地 DMA_InitStructure.DMA_BufferSize = 32; //dma缓存大小 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址寄存器不变 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址寄存器 递增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //外设数据宽度 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循环缓存模式,数据传输数目为0时,自动恢复配置初值 DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //通道未被设置成内存到内存模式,与循环模式相对DMA_Init(DMA2_Channel4, &DMA_InitStructure); //将DMA_InitStructure中指定的参数初始化dma的通道寄存器 // Enable DMA2 Channel4 DMA_Cmd(DMA2_Channel4, ENABLE); //使能通道 }/** * @brief Configures the different GPIO ports. * @param None * @retval None */void GPIO_Configuration(void){ GPIO_InitTypeDef GPIO_InitStructure;/* Once the DAC channel is enabled, the corresponding GPIO pin is automatically connected to the DAC converter. In order to avoid parasitic consumption, the GPIO pin should be configured in analog */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5; //一旦DAC通道使能,相应的GPIO PA4,PA5自动与DAC的模拟输出相连, GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //为了避免避免寄生的干扰和额外的功耗,PA4 置成模拟输入 GPIO_Init(GPIOA, &GPIO_InitStructure);}想输出固定电压,将数组里的数都变成一个数就可以了转自http://haoxi.spaces.eepw.com.cn/articles/article/item/97855望采纳。2023-07-29 19:25:211